Você está na página 1de 0

NMERO 89 P.V.

P 6,95
CANARIAS P.V.P 7,05
HADOOP
Grandes datos con
presupuestos pequeos
Versin Live y
de instalacin.
Ms info en
pg. 3.
WWW. L I N U X - MA G A Z I N E . E S
HADOOP
Migracin de apps Android de 2.x a 4.x
8
4
1
3
0
4
2
5
9
4
5
0
5
0
0
0
8
9
PREVENCIN
Control de incendios con Arduino
NUBES SEGURAS
Seguridad remota con OpenSCAP
MULTISISTEMA
Arranca mltiples distros desde un slo dispositivo
DART
El JavaScript de Google
GRATIS
De Gingerbread
a Jelly Bean
GRANDES DATOS, PRESUPUESTOS PEQUEOS
StarCluster: herramientas para HPC en la nube
Grandes volmenes de datos con Hadoop
ALEXANDRIA
Catalogacin fcil de
libros y colecciones
REKONQ
El navegador
ligero de KDE
OPENSSL
Implementa cifrado
desde Bash
VIM OUTLINER
Dota de estructura a tus
documentos de texto
4.95
Euros
DVD
LINUX MINT
14 NADIA

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] Linux Mint:
http:// www. linuxmint. com/
RECURSOS
Como las mayores novedades de
Linux Mint han ocurrido en su versin
con el escritorio Cinnamon, sta es la
que hemos incluimos en nuestro DVD.
Para empezar a usar tu Linux, inserta el
DVD en el reproductor y reinicia 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. Des-
pus, guarda los cambios y sal de la
herramienta de configuracin para que
se reinicie el arranque. Como cada
BIOS es diferente, recomendamos
consultar la documentacin del fabri-
cante para realizar esta operacin.
Arranque
L
inux Mint sigue mejorando y ganando adeptos debido a su facilidad de uso,
atractiva interfaz y slida base. Ahora llega su versin 14, con importantes
novedades y mejoras.
Por un lado, Mint viene de manera predeterminada en dos versiones segn sus
escritorios: Mate, que es el fork del cdigo base de Gnome 2; y Cinnamon, un fork de
Gnome 3, que pretende implementar un escritorio ms familiar que la rama principal,
pero aprovechando el avanzado cdigo de Gnome 3.
La versin Cinnamon implementa nuevos espacios de trabajo persistentes, mejoras
en los widgets de notificaciones y de reproduccin de medios, un remozado navega-
dor de ficheros llamado Nemo, y una nueva pantalla de inicio de sesin, MDM, que es
personalizable. Adems permite la seleccin de usuarios segn su avatar y un cambio
entre cuentas ms sencillo.
3
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
EDITORIAL
4
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
R
ecientemente me he encontrado
peleando un batalla unipersonal en
contra del Arranque Seguro/ Res-
tringido de Microsoft. Recopil informacin
y lo met en una wiki a la que bautic con
el desafortunado nombre de nouefi. com,
desafortunado porque no es UEFI exacta-
mente el problema, sino una de sus funcio-
nalidades. Y ni siquiera es esa funcionali-
dad, la del arranque seguro, intrnseca-
mente mala, sino el uso que pretende
hacer y hace Microsoft de ella.
Para mi guerra personal, en la que imagi-
naba que podra hacer algo til y por fin
servir a la comunidad de Software Libre de
una manera activa, alist la ayuda de un
abogado para cuestiones legales y un tc-
nico experto en informtica forense (entre
otras cosas) para los aspectos tcnicos.
Quise alistar tambin a una comunidad
de usuarios para, por va del crowdsour-
cing, acabar con el chantaje de Microsoft
de una vez por todas. La cosa no funcion
as. S, recopil informacin, transcrib y
traduje posts de blogs de los implicados, le
clusulas de manuales para proveedores de
hardware, publiqu y publicit el proyecto
y esper que alguien se me uniera.
Nadie lo hizo.
Y lo digo sin amargura: si a uno no se le
unen en las causas que emprende, por un
lado no tiene nada que recriminar, ya que
nadie es el ejrcito personal de nadie. Por
otro ya sabe algo valioso sobre s mismo:
que no tiene ese tirn, la carisma necesa-
ria para ello. El problema no est en los
dems, sino en uno mismo. No tienes la
cualidad de convencer y ya est. Sup-
ralo.
Luego est aquello de que si quieres
que algo se haga, hazlo t mismo, cosa
que me apliqu y segu adelante. Pero era
uno a veces eramos dos, raramente tres,
pero, la mayor parte del tiempo, uno.
Al final, despus de meses de trabajo y
de perseguir a unos y otros y no conseguir
absolutamente nada, me medio convenc
de que, si a los dems le daba igual, es que,
despus de todo, no sera tan importante.
Esto me produjo un serio caso de disonan-
cia cognitiva (que ahora precisamente trato
de purgar escribiendo esto) porque, des-
pus de estudiar le evidencia, la parte racio-
nal de mi cerebro me deca justo lo contra-
rio, que era un tema muy peligroso y que
algo haba que hacer.
Mi idea hubiera sido llevar el Arranque
Seguro de Microsoft ante los organismos
pertinentes, ya fuese aqu en Espaa o en
Europa y hacer que se declarase ilegal, que
se le volviese a multar a la empresa de
Steve Ballmer por prcticas anticompetiti-
vas y se obligase a los fabricantes de hard-
ware a retirar las mquinas infectadas/ afec-
tadas. Mi objetivo de fondo era doble: pri-
mero evitar que Microsoft volviese a inten-
tar un golpe de estado al mercado de la
informtica domstica y ofimtica, como
haba hecho en mltiples ocasiones ante-
riores. Y, segundo, lanzar un mensaje a los
fabricantes para que dejasen ya de una vez
de bailar al son que les marca Redmond. Si
se les multaba o tuviesen que lidiar con
una reclamacin de todos sus aparatos a lo
largo y ancho de la Unin Europea, se les
calara en sus duras molleras de una vez
por todas que esa poltica ha dejado de ser
un buen negocio.
As que, mientras que la comunidad de
desarrolladores estaba peleando por encon-
trar una solucin tcnica (parece que algu-
nos lo han conseguido ya. Con muchos
peros, eso s), yo estaba luchando porque
abolieran el sistema completamente. Poco
positivo por mi parte no? Pero, escuchad
mi razonamiento, porque, al menos en mi
cabeza, tiene sentido.
Admitir el Arranque Seguro UEFI imagi-
nado por Microsoft era admitir que de facto
sigue siendo duea y seora de un sector
que nadie le ha concedido y de la que se ha
apropiado y ha controlado con malas artes.
As que, mientras gente como Matthew
Garrett y James Bottomley saltaban a travs
de los aros de Microsoft, yo quera romper-
los para que pudiramos andar como
humanos en vez de perritos saltimbanquis
de una puetera vez.
En segundo lugar, me pareca una
enorme prdida de tiempo. Estaba (y estoy)
seguro de que los hackers de la comunidad
daran con una solucin no aprobada
tarde o temprano. Al igual que se rompi el
cifrado de los DVDs y el anillo cero de la
PS3, no tena ninguna duda de que alguien
muy listo acabara publicando la clave de
Microsoft en algn lado y acabara en cami-
setas y carteles incluso antes de que se
implementara en todos los bootloaders de
las distros. Pero para qu? Para qu iban
las mejores mentes del desarrollo y la inge-
niera inversa a dedicar su precioso tiempo
en arreglar con parches algo que no haca
falta romper? Y con las cosas que hay por
hacer! Me pareca un malgasto de recursos
que raya lo criminal.
En tercer lugar, si la solucin pasaba por
la intervencin del usuario final (slo ten-
dr que desactivarlo en UEFI, segn algu-
nos), eso era otro obstculo ms que impe-
dira la adopcin de GNU/ Linux como sis-
tema domstico. Una de las premisas fun-
damentales de la usabilidad es que, cuan-
tos ms pasos tiene que dar un usuario
para completar una tarea como puede ser
instalar un sistema operativo menos pro-
bable es que complete dicha tarea. Si parti-
mos de la base de que una de las principa-
les razones de que Linux no haya tenido
una gran aceptacin como sistema de escri-
torio es que hay que instalarlo, si encima le
pedimos a los usuarios que se metan en
UEFI y desactiven el arranque seguro,
cosa que suena bastante peligroso para el
no experto, vamos a desincentivar a un
montn de gente. Ya tiene que esquivar
Linux bastantes zancadillas, no pudindose
distribuir drivers y cdecs privativos y otras
gilipolleces como para echarle ms mierda
encima.
Pero a nadie le pareci importar. Win-
dows 8 est aqu, el arranque seguro UEFI
controlado por Microsoft est aqu y el
rdago de la empresa lo ha colado sin que
nadie le retara. Que s, que ya os oigo, que
no importa, que el escritorio est muerto.
Pues, no del todo. An le quedan algunos
aos. Pero, para GNU/ Linux al menos, s lo
han (hemos?) matado un poco ms.
Paul C. Brown
Director
HISTORIA DE
MI FRACASO
10 Clsters en la Nube
El procesamiento basado en la nube
se ha convertido en una opcin viable
para la computacin de alto rendi-
miento (HPC). Te explicamos la HPC
basada en la nube, presentamos Star-
Cluster y mostramos cmo crear una
imagen personalizada de una
mquina para que se ejecute en los
nodos.
17 Gran Excavacin
Experimenta el poder de la supercom-
putacin y la revolucin de grandes
volmenes de datos con Apache
Hadoop.
26 Crptico
El Cifrado (o criptografa) es una parte
importante de la seguridad en TI y
OpenSSL es un conjunto de herra-
mientas bien conocido para Linux.
Los expertos usan OpenSSL porque es
libre, tiene unas enormes capacidades
y es sencillo de utilizar en script de
Bash.
30 Multi-Talento
Los usuarios de Linux pueden elegir
entre ms de 200 imgenes ISO con
distribuciones completas en la web. Si
te gusta experimentar, el pequeo pro-
grama MultiSystem permite guardar-
los en una memoria USB.
33 Migracin de Apps
Las nuevas aplicaciones capaces de
aprovechar las funciones exclusivas
para tablets van apareciendo con
cuentagotas en Google Play. En esta
serie de artculos vamos a intentar
explicar los motivos e intentaremos
incentivar la portabilidad de Ginger-
bread a Ice Cream Sandwich.
39 En la Diana?
El lenguaje de programacin Dart es la
alternativa moderna de Google para
Javascript. Se ejecutar principal-
mente en navegadores web, adems
de por lnea de comandos y en otros
tipos de servidores como reemplazo
para PHP.
Schlagwort sollte hier stehen COVER STORY
44 Para Llevar
Un par de lneas de cdigo es todo lo
que se necesita para crear sencillos
scripts de Perl que mejoran la funcin
bsica de cortar y pegar del escritorio
de Linux, aadiendo buffers para aho-
rrar tiempo al editar.
48 Tierra a la Vista!
La aldea global es lo suficientemente
grande como para querer averiguar
donde se encuentran nuestros amigos
y nuestros enemigos. Charly ofrece
una rpida introduccin a la geografa
basada en IP.
49 Nubes Seguras
Herramientas del tipo OpenSCAP y
Aqueduct pueden hacernos la vida
ms fcil implementando estndares
de seguridad en la nube.
51 Prevencin
Utilizamos Arduino para alertarnos de
peligros de accidentes en el hogar.
Con Arduino podemos saber de
manera inmediata y remota si hay
escapes de gas, incendios o inundacio-
nes en nuestra casa.
DESARROLLO
DESARROLLO
PRCTICO
PRCTICO
ADMINISTRACIN
PORTADA
HARDWARE
LI NUX MAGAZI NE
03 DVD Linux Magazine
04 Editorial
08 Noticias
81 Eventos
81 Informacin de Contacto
82 Prximo Nmero
CONTENIDOS Linux Magazine n 89
6
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
56 Mirada Felina
Aprovchese del bajo consumo elc-
trico que ofrecen los dispositivos NAS
para monitorizar cmaras de seguri-
dad.
61 Cambio de Guardia
Rekonq parece ser el sustituto de Kon-
queror como el navegador web estn-
dar en KDE. Razn suficiente para
dedicarle nuestra atencin.
64 Glorioso Glom
Las bases de datos de escritorio son
perfectas para mantener pestaas con
varios tipos de datos desde enlaces y
fragmentos de texto hasta tareas y fac-
turas pero construir bases de datos
desde cero puede ser algo desalenta-
dor, a menos que podamos usar
Glom.
68 En La Lnea
Estar la conferencia terminada a
tiempo? Qu tareas debe completar y
en qu orden? Naci Jean antes que
Derek? El Atari ST sali despus del
Amiga? Timeline es un programa que
con tan slo un vistazo, te puede dar
una respuesta rpida a este tipo de
preguntas.
71 El Bibliotecario
Puedes perder la pista de tus libros a
medida que crece tu coleccin. Ale-
xandria te permite catalogar tus libros
rpida y fcilmente sin necesidad de
un molesto servidor de base de datos.
74 A la Orden
Si necesitamos perfilar una redaccin,
hacer una lista o escribir algo alta-
mente estructurado como un fichero
CSS para un sitio web, entonces no
hay que mirar ms all de la lnea de
comandos, especialmente si nos
encontramos cmodos con el editor
de textos Vim.
77 Konsultorio
Klaus Knopper, creador de Knoppix,
vuelve un mes ms para responder a
las preguntas de los lectores. Este
mes: Desapareci el cliente FTP?,
Falta FFmpeg?, NTFS Montado como
usuario normal y Dependencias Flash.
80 Acceso Completo
Diseando ordenadores para todos:
Maddog revisa algunos problemas de
accesibilidad en la informtica.
7
HARDWARE
LINUX USER
LINUX USER
7
Nmero 89 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
8
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
desde sensores de flujo de aire (para
monitorizar la respiracin), hasta un
sensor de electrocardiograma.
El shield en s es ridculamente barato
con un coste de 75 euros, aunque, eso s,
si compras el kit completo, con todos los
sensores mdicos, te supondr un des-
embolso de
unos 300 euros,
lo cual, a nues-
tro entender
sigue siendo
barato.
Y ya que esta-
mos hablando
de Raspberry Pi
y cosas que se
le acoplan, el
micro-ordena-
dor ahora tiene
un App Store.
Segn se lee en
[3], con objeto
de facilitar la
comparticin
de aplicaciones, se ha creado el Pi Store,
que permite descargar, subir, puntuar y
recomendar apps para Pi. Pi Store es una
aplicacin disponible desde [4] o como
paquete APT llamado pistore.
Movimiento Maker
Si te interesa el movimiento maker, pero
eres tan torpe como yo, lo que est
haciendo el startup chino Makeblock [1]
te parecer irresistible.
Combinando los conceptos de Arduino,
Lego y Mecanno, estn fabricando unos
kits que permi-
ten crear robots
y dispositivos
mecnicos de
manera sencilla,
modular y
abierta. Sus
diseos son tan
inteligentes e
interesantes que
parece increble
que a nadie se
la haya ocurrido
antes. Como
ejemplo, vase
su solucin para
asegurar torni-
llos a alturas
aleatorias en una viga.
Pero no slo es compatible con
Arduino, sino que han creado un mdu-
los que permite integrar el hardware del
Lego Mindstorms en tus artefactos,
haciendo que sea la perfecta expansin
para fines educativos.
Y siguiendo con hardware libre: Libe-
lium/ Cooking Hacks ha sacado un shield
mdico llamado eHealth [2] para Arduino
y Raspberry Pi. Ideal para vigilar los
excesos cometidos en Navidad? Sea como
fuere, la empresa Zaragozana Libelium, a
travs de su divisin de hardware abierto
Cooking Hacks, saca su shield de eHealth
que, acoplado a un Arduino o Raspberry
Pi, puede funcionar como monitor de los
signos vitales de un paciente.
El shield eHealth permite que se le
acoplen todo tipo de sensores mdicos,
Darling: el WINE
MacOS X
Si alguien tena alguna duda sobre si
GNU/ Linux puede convertirse en la
plataforma universal, dos desarrollado-
res de la comunidad de Software Libre
se han empeado en crear una infraes-
tructura a lo WINE denominado Dar-
ling [1] que permitir que se ejecuten
aplicaciones MacOS X (y luego iOS)
directamente en GNU/ Linux.
Lubos Dolezel y Shinichiro Hamaji
pretenden conseguir que se ejecuten
las aplicaciones MacOS X de tres
maneras: primero mapeando las fun-
ciones directamente a funciones dispo-
nibles en Linux y, si eso no funciona,
envolviendo funciones nativas para
superar la brecha de incompatibilidad
ABI. Como ltimo recurso se suminis-
trara una reimplementacin por
encima de los otros APIs nativos.
De momento Darling est en las pri-
meras fases de desarrollo, permitiendo
ejecutar slo algunas aplicaciones bsi-
cas desde la consola. As que nada de
CS5 ni Garage Band de momento
pero para eso estn las alternativas
libres no?
Darling se distribuye bajo licencia
GPLv3, aunque alguna parte se
encuentra bajo la licencia Open Source
de Apple [2], pero los desarrolladores
pretenden sustituir esos componentes
por los suyos propios y bajo una licen-
cia GPL con el tiempo por si las mos-
cas.
NOTICIAS
[1] Darling:
http:// darling. dolezel. info/ en/ Darling
[2] Licencia Open Source de Apple:
http:// www. opensource. apple. com/
license/ apsl/
RECURSOS
[1] Makblock: http:// www. makeblock. cc/
[2] eHealth shield de Cooking Hacks:
http:// www. cooking-hacks. com/
index. php/ documentation/ tutorials/
ehealth-biometric-sensor-platform-a
rduino-raspberry-pi-medical?utm_so
urce=11-12-12&utm_medium=newsl
etter&utm_campaign=december
[3] PiStore: http:// www. raspberrypi. org/
archives/ 2768
[4] Descarga del PiStore: http:// www.
raspberrypi. org/ downloads
RECURSOS
8
Nmero 8 WWW. L I NUX- MAGAZI NE. ES
NOTICIAS
PORTADA StarCluster
10
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
zon Elastic Compute Cloud). Est diri-
gido a cientficos e investigadores que
necesitan la potencia de clculo de un
clster. Esa necesidad puede ser para
computacin paralela, tareas de pro-
cesamiento de datos por lotes, ejecu-
cin de muchas iteraciones en un
modelo de simulacin o por motivos
educativos y docentes.
El kit de herramientas se presenta
como una aplicacin fcil de utilizar
para la lnea de comandos. Escrito en
el lenguaje Python, utiliza la API boto
[2], una interfaz para AWS (Amazon
Web Services), del que EC2 es un sub-
conjunto. Soporta diversos tipos de
imgenes de mquinas diferentes,
entre los que se incluye las imgenes
de Linux basadas en DEB y RPM. En
este artculo, vamos a mostrar cmo
configurar un clster HPC
basado en la nube usando
el kit de herramientas Star-
Cluster y construiremos
una imagen del sistema
operativo personalizada.
Para comenzar, el lector
puede utilizar la capa Ama-
zon Web Services Free
Usage (Servicios Web de
Amazon de Uso Gratuito) y
poder completar los ejem-
plos mostrados en este art-
culo.
L
a virtualizacin ya lleva un
largo recorrido. De hecho, se
ha convertido en una opcin
viable para la computacin de alto
rendimiento (HPC) en la nube.
StarCluster [1] es un kit de herra-
mientas para lanzar, controlar y
orquestar clsters de servidores vir-
tuales dentro del servicio EC2 (Ama-
Por qu utilizar la nube para HPC?
La mayora de los argumentos por
defecto son aplicables para el uso de
la computacin basada en la nube.
sta es el siguiente nivel de abstrac-
cin, permitiendo la subcontratacin
programada de centros de procesa-
miento de datos. Lo que tradicional-
mente sola ser una habitacin local,
llena de hardware con un ciclo de vida
de unos tres a cinco aos, situada
dentro de unas instalaciones que pro-
porcionaban corriente elctrica y refri-
geracin, ahora se encuentra disponi-
ble por medio de una API programa-
ble. Esto permite a los administrado-
res de sistemas y programadores cen-
trarse en lo que mejor saben hacer,
potenciando a los investigadores por
medio de entornos personalizados. Ya
HPC en la Nube con StarCluster
Clsters
en la Nube
$ mkdir ~/starcluster ; cd ~/starcluster
$ curl -O https://raw.github.com/pypa/
virtualenv/master/virtualenv.py
$ python virtualenv.py cloudhpc
New python executable in cloudhpc/bin/python
Installing setuptools.................done.
Installing pip..............done.
$ . cloudhpc/bin/activate
$ pip install starcluster
Downloading/unpacking starcluster
...
Successfully installed starcluster ssh boto
workerpool Jinja2 decorator pyasn1 pycrypto
Cleaning up...
Listado 1: Instalando StarCluster
El procesamiento basado en la nube se ha convertido en una opcin
viable para la computacin de alto rendimiento (HPC). Te explicamos la
HPC basada en la nube, presentamos StarCluster y mostramos cmo
crear una imagen personalizada de una mquina para que se ejecute en
los nodos. POR GAVIN W. BURRIS
Gavin W. Bur-
ris es un espe-
cialista en
Linux y en
computacin
de alto
rendimiento
que se divierte
proporcio-
nando recur-
sos computacionales para la investi-
gacin a los cientficos. Ha estado
implicado en temas de investigacin y
computacin de alto rendimiento
desde 2001. Actualmente trabaja en
proyectos de HPC, grandes bases de
datos, computacin basada en la nube
y tecnologas grid. Los lenguajes
favoritos de Burris son Python y Bash.
En su tiempo libre, se divierte viendo
pelculas malas, editando vdeos,
usando sintetizadores y haciendo
ciclismo. Mantiene un blog en: http://
idolinux. blogspot. com.
EL AUTOR
no habr que recibir gran-
des paquetes de mer-
cancas ni nos surgir
el problema de tener que
subirlas
a las
salas
correspon-
dientes. Ya
no habr que
preocuparse por
luces amarillas de
discos duros
fallando. No
habr ms llama-
das para repara-
ciones elctricas
ni de aire acondi-
cionado. Todas
estas complica-
ciones logsticas
desaparecern
con la nueva capa de abstraccin pro-
porcionada por el servicio de compu-
tacin basada en la nube (vase el
cuadro titulado Por qu la nube?).
StarCluster PORTADA
11
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Las razones ms importantes a considerar para pasarnos a una
solucin basada en la nube para HPC son la disponibilidad de los
recursos, cargas de trabajo a demanda y esfuerzos en comunidad.
Si hay espacio en el centro de procesamiento de datos local, ese
sera el mejor recurso para implantar un sistema HPC no basado
en la nube local. El espacio podra ya estar pagado o subcontra-
tado a alguna agencia local. Incluso aunque la nube se encuentre
de moda, tener los recursos subcontratados a un proveedor local
podra ser la mejor opcin.
Sin embargo, si como a menudo sucede, el espacio est limitado o
simplemente no existe, la nube empezar a parecernos mucho
ms atractiva. Y, no, un cuartito o una oficina no es una buena elec-
cin para albergar un clster de alto rendimiento que consume
bastante energa y genera bastante calor. Los servidores son bsi-
camente radiadores de calor. Por un lado entra cdigo, datos y
electricidad. Por el otro obtenemos los resultados finales, mucho
calor y la factura. El mantenimiento de estos sistemas no es una
tarea trivial. Por otro lado, la subscripcin a un servicio basado en
la nube es posible de forma instantnea y mucho ms fcil, parti-
cularmente para investigadores individuales o para proyectos
independientes.
Cuando se compara con HPC, la virtualizacin suele encontrarse al
otro lado del espectro, con muchos servidores virtuales con poca
carga ubicados en servidores hipervisores tolerantes a fallos
sobredimensionados. HPC tradicionalmente ha consistido en
muchos servidores nodos eficientes para altas cargas de trabajo,
siempre ocupados por medio de colas de trabajos, lo que signifi-
caba que HPC no era un buen candidato para esta solucin. Con la
expansin de las IaaS (Infrastructure as a Service), sin embargo,
los proveedores de computacin basados en la nube ofrecen una
forma accesible para los sistemas de computacin tradicionales
de cara a la investigacin para virtualizar los diferentes nodos
hardware situados en el centro de procesamiento de datos. Esta
virtualizacin hace posible ahora que haya ms tipos de instancias
optimizadas.
Con la nueva variedad de tipos de instancia, incluyendo las instan-
cias Cluster Compute [3] especficamente diseadas para aplica-
ciones HPC, las cargas de trabajo pueden hacerse coincidir con la
configuracin hardware ptima. La nube ofrece diversas opciones
para diversos ncleos, grandes capacidades de memoria, siste-
mas dedicados, correspondencias uno a uno y disposicin de
hosts virtuales en sistemas fsicos incluso opciones con compu-
tacin basada en GPU. En vez de tener racks y apilamientos de
esos servidores fsicos, los programadores de sistemas pueden
programar scripts para lanzar y configurar de forma instantnea
clsters enteros del tamao adecuado y la potencia para procesar
los datos.
Las caractersticas claves estn bajo demanda y en picos de carga
y es el motivo por el cual la computacin basada en la nube es un
modelo muy atractivo. Si lo que se est buscando es reemplazar
un clster tradicional con una carga media durante su periodo de
vida de ms del 90%, la nube no ser la respuesta. Haciendo un
clculo rpido de costes comparando el hardware tradicional con
las soluciones basadas en la nube, podr verse que la solucin tra-
dicional es una fraccin del coste pero, de nuevo, slo si se dispo-
nen de los recursos locales disponibles. Donde realmente destaca
la nube es cuando se producen picos de cargas de trabajo. Si la
carga de trabajo slo requiere de periodos intermitentes de com-
putacin intensa, digamos cuando llega un nuevo conjunto de
datos o hay que cumplir una fecha tope, ser beneficioso poder
acceder a muchos miles de ncleos de CPU para un clculo deter-
minado cuando sea necesario. Las soluciones basadas en la nube
proporcionan una capacidad que no encontramos en los sistemas
tradicionales de tamaos fijos, sin tener servidores infrautilizados
durante periodos de tiempo a lo largo del ao. En Amazon pode-
mos encontrar muchos casos de estudio mostrando un uso efec-
tivo de la nube para HPC [4], entre los que se incluye el procesa-
miento de alta resolucin de imgenes de satlite de Laboratorio
de Propulsin a Chorro de la NASA para el guiado de sus robots o
el anlisis del genoma de la Escuela de Medicina de Harvard para
personalizar un medicamento de forma individual.
Otro beneficio importante del uso de una solucin HPC pblica
basada en la nube es el esfuerzo comunitario. Una amplia varie-
dad de mquinas virtuales (en este caso, AMIs Amazon Machi-
nes Images) se encuentran disponibles con distintas versiones y
tipos de software. Muchas de estas mquinas se encuentran man-
tenidas por comunidades interesadas. Los proyectos comunitarios
benefician a todos los implicados. Cuanto ms gente use y contri-
buya en un esfuerzo comn, mejores prcticas y flujos de trabajo
modulares emergern. Esto es de lo que realmente va el software
de cdigo abierto. Entra StarCluster que proporciona un nmero
de imgenes pre-establecidas y listas para utilizarse, as como
herramientas para la lnea de comandos para convertirlas en
potentes sistemas computacionales funcionales.
Por qu en la Nube?
$ starcluster help
StarCluster - (http://web.mit.edu/starcluster)
(v. 0.93.3)
Software Tools for Academics and Researchers (STAR)
Please submit bug reports to starcluster@mit.edu
!!! ERROR - config file ~/.starcluster/config does not
exist
Options:
--------
[1] Show the StarCluster config template
[2] Write config template to ~/.starcluster/config
[q] Quit
Please enter your selection: 2
>>> Config template written to ~/.starcluster/config
>>> Please customize the config template
Listado 2: Creando una Configuracin
zon AWS. Si no se
posee una, no hay
problema, tan
slo hay que
registrarse en
AWS Free
Usage [7]. Hay
que tener en
cuenta que AWS
es un servicio
basado en horas y
se facturar por
cualquier uso. El
ejemplo mostrado
en este artculo
debera costar slo
unos cuantos cn-
timos por el uso
de una pequea
cantidad de alma-
cenamiento en
disco EBS (Elastic
Block Storage).
Una vez que se
disponga de una
cuenta, hay que
abrir una ventana
del terminal del
sistema Linux
local para comen-
zar. Actualmente
estoy utilizando
Fedora 17 como
sistema local, pero
estos pasos debe-
ran funcionar de
la misma forma en
cualquier distribu-
cin de Linux
reciente.
Para empezar,
debemos crear un
directorio para el
proyecto llamado
starcluster. Luego,
podemos utilizar
virtualenv con pip
[8] para instalar automticamente los
paquetes Python necesarios, inclu-
yendo StarCluster, dentro de un
entorno autocontenido y en el subdi-
rectorio llamado cloudpc (Listado 1).
La primera vez que se ejecuta Star-
Cluster, el programa lanzar un error
porque le falta la configuracin, pero
nos preguntar si queremos crear una
configuracin nueva. Seleccionaremos
la opcin 2 para crear un fichero de
configuracin por defecto (Listado 2).
A continuacin, editamos dicho
fichero de configuracin, estable-
ciendo los valores correspondientes.
Hay que asegurarse de sustituir nues-
tras credenciales. Aqu, la
configuracin ser para microinstan-
cias de 64 bits de Scientific Linux 6.
Usando el editor de textos de nuestra
eleccin aadiremos las lneas del Lis-
tado 3 al fichero ~/.starcluster/config.
El editor GNU nano suele ser el editor
de textos para la lnea de comandos
ms fcil de utilizar.
A continuacin, para crear la clave
SSH para el acceso por la shell remota
a los nodos del clster, tendremos que
introducir el siguiente comando:
$ starcluster createkey -o U
~/starcluster/foocluster.rsa U
foocluster
Presentando StarCluster
StarCluster es un proyecto del MIT
(Massachusetts Institute of Techno-
logy), elaborado por el equipo STAR
(Software Tools for Academics and
Researchers) [5]. El kit de herramien-
tas es de cdigo abierto y se distri-
buye libremente. La ltima versin de
desarrollo se encuentra en el sistema
de control de revisiones GitHub [6].
Es prerrequisito para el uso de Star-
Cluster disponer de una cuenta Ama-
PORTADA StarCluster
12
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
$ starcluster sshmaster foocluster -u sgeadmin
[sgeadmin@master ~]$ qstat -g c
CLUSTER QUEUE CQLOAD USED RES AVAIL TOTAL aoACDS cdsuE
---------------------------------------------------------------------
all.q 0.14 0 0 2 2 0 0
[sgeadmin@master ~]$ qhost
HOSTNAME ARCH NCPU LOAD MEMTOT MEMUSE SWAPTO SWAPUS
---------------------------------------------------------------------
global - - - - - - -
master linux-x64 1 0.20 590.8M 68.1M 243.2M 0.0
node001 linux-x64 1 0.08 590.8M 55.3M 243.2M 0.0
Listado 7: Visualizando la Cola
$ nano ~/.starcluster/config
[key foocluster]
KEY_LOCATION = ~/starcluster/foocluster.rsa
[cluster smallcluster]
KEYNAME = foocluster
NODE_IMAGE_ID = ami-d3ce7bba
NODE_INSTANCE_TYPE = t1.micro
Listado4: Especificando una Imagen y Tipo
de Instancia
$ nano ~/.starcluster/config
[aws info]
AWS_ACCESS_KEY_ID = YOUR_AWS_Access_Key_ID
AWS_SECRET_ACCESS_KEY = YOUR_Secret_Access_Key
AWS_USER_ID= YOUR_amazon_userid
Listado3: Aadiendo Parmetros a la
Configuracin
$ starcluster start -s 2 foocluster
...
>>> Using default cluster template: smallcluster
>>> Validating cluster template settings...
>>> Cluster template settings are valid
>>> Starting cluster...
>>> Launching a 2-node cluster...
...
>>> Configuring cluster took 1.154 mins
>>> Starting cluster took 2.305 mins
...
Listado 5: Iniciando el Micro Cluster
$ starcluster listclusters
...
Uptime: 0 days, 00:04:05
Zone: us-east-1d
Keypair: foocluster
EBS volumes:
vol-4c048437 on master:/dev/sda (status: attached)
vol-4f048434 on node001:/dev/sda (status: attached)
Cluster nodes:
master running i-6a10c710
ec2-50-17-57-111.compute-1.amazonaws.com
node001 running i-6810c712
ec2-23-20-255-177.compute-1.amazonaws.com
Total nodes: 2
Listado 6: Listando los Clsters en
Ejecucin
Tendremos que aadir al fichero de
configuracin la definicin de la clave
RSA, tambin tendremos que actuali-
zar la seccin smallcluster para espe-
cificar el tipo de la instancia t1.micro
y nuestra nueva clave (Listado 4). Las
microinstancias slo proporcionan
una fraccin de un ncleo de una CPU
pero son tiles para el prototipado, las
pruebas y sirven de ayuda para
comenzar con la capa de uso gratuita.
La imagen de la mquina
ami-d3ce7bba [9] est basada en
Scientific Linux 6. Scientific Linux
[10] es una versin recompilada de
Enterprise Linux, mantenida por los
laboratorios nacionales y es una dis-
tribucin popular entre los equipos de
investigacin universitarios.
Ahora ya estamos preparados para
comenzar un microclster de dos
nodos (Listado 5). El nodo principal
de un clster se denomina nodo
maestro. Cada nodo que tenga un
hueco en la cola de trabajos del Grid
Engine se conoce como nodo trabaja-
dor. Por defecto, habr un hueco por
ncleo de CPU, incluyendo los
ncleos en el nodo maestro. Para ver
qu instancias se encuentran actual-
mente en ejecucin, usaremos la
opcin listclusters (Listado 6). Para
conectarse desde la lnea de coman-
dos al nodo maestro por medio de
SSH, usaremos la opcin sshmaster,
luego para ver la cola de trabajos
actual disponible usaremos los
comandos qstat y qhost (Listado 7). El
sistema de colas por lotes que ges-
tiona los trabajos aqu se denomina
Grid Engine. Los scripts de los traba-
jos enviados a la cola esperarn a que
hayan huecos libres y luego se ejecu-
tarn en base a una prioridad basada
en pesos. El estado muestra que ahora
tenemos dos hosts con un hueco de
CPU cada uno en la cola de trabajos
all.q. Pero por qu se usan estas
CPUs? Como ejemplo, el Listado 8
muestra cmo usar el mtodo de
Monte Carlo [11] para calcular el valor
de Pi:
$ grep -v local /etc/hosts | U
cut -d -f2 > ~/hostfile
$ nano pi.py
$ mpirun -np 2 -hostfile U
hostfile python pi.py
3.14192133333
Ejecutando mpirun fuera de un script
no se usar la cola de trabajo, que es
vital cuando se
quiere trabajar de
forma eficiente
con muchos pro-
yectos. Para usar
la cola, hay que
crear un script de
StarCluster PORTADA
13
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
trabajo especificando el entorno de
paralelizacin (Listado 9) y luego
enviarlo con el comando qsub
$ nano pi.sh
$ qsub pi.sh
Para comprobar el estado del trabajo
utilizaremos el comando qstat. El
script entrar en la cola en el estado
encolado-y-esperando (qw) y luego
pasar al estado en ejecucin (r). Tras
finalizar, la salida del trabajo podre-
mos encontrarla en el fichero
$JOB_NAME.o$JOB_ID. Los errores
del mdulo pueden ignorarse sin pro-
blemas, ya que hacen referencia a un
inofensivo bug ya conocido.
$ qstat
$ cat pi.o1
...
Got 2 processors.
3.14192133333
Podemos monitorizar el estado de
todas las instancias en un navegador
web por medio de EC2 Management
Console [12]. Cuando hayamos finali-
zado, tendremos que asegurarnos de
salirnos y finalizar todas las instan-
cias que se encuentren ejecutndose,
ya que la factura se basa en las horas
de uso. Para ello, introduciremos las
siguientes lneas:
$ exit
$ starcluster terminate U
El Listado 10 muestra el registro de creacin para ami-d3ce7bba
SL6 AMI [13] starcluster-base-scientific-linux-6.2-x86_64-06.
Esta imagen se basa en la ami-e2a0058b Scientific Linux 6.2
x86_64 AMI [14] de Jamie Kinney. Podemos usar este registro
como receta para crearnos nuestro propio nodo de computa-
cin AMI con el software de nuestra eleccin preinstalado.
Registro de Creacin
01 from mpi4py import MPI
02 import random
03
04 comm = MPI.COMM_WORLD
05 rank = comm.Get_rank()
06 mpisize = comm.Get_size()
07 nsamples = int(6e6/mpisize)
08
09 inside = 0
10 random.seed(rank)
11 for i in range(nsamples):
12 x = random.random()
13 y = random.random()
14 if (x*x)+(y*y)<1:
15 inside += 1
16
17 mypi = (4.0 * inside)/nsamples
18 pi = comm.reduce(mypi, op=MPI.SUM, root=0)
19
20 if rank==0:
21 print (1.0 / mpisize)*pi
Listado 8: pi.py
01 #!/bin/sh
02 # Export all environment variables
03 #$ -V
04 # Your job name
05 #$ -N pi
06 # Use current working directory
07 #$ -cwd
08 # Join stdout and stderr
09 #$ -j y
10 # PARALLEL ENVIRONMENT:
11 #$ -pe orte 2
12 # Enable resource reservation
13 #$ -R y
14 # The max hard walltime for this job is 16 minutes
(after this it will be killed)
15 #$ -l h_rt=00:16:00
16 # The max soft walltime for this job is 15 minute
(after this SIGUSR2 will be sent)
17 #$ -l s_rt=00:15:00
18 echo Got $NSLOTS processors.
19 # The mpirun command.
20 mpirun -np $NSLOTS python pi.py
Listado 9: pi.sh
una solucin bastante viable para
diferentes cargas de trabajo. Star-
Cluster debera ser una herramienta
clave en el arsenal de cualquier pro-
gramador de sistemas, ya que propor-
ciona una interfaz poderosa para uti-
lizar los recursos de la nube de
manera efectiva. El kit de herramien-
tas se ha construido a partir del
modelo, ya bien establecido, de cls-
ters HPC de Linux, proporcionando
una ruta clara para transferir los
conocimientos existentes y el cdigo
a la nube. Para aprender ms sobre
StarCluster del MIT, podemos encon-
trar informacin adicional en el
manual [15] y en la wiki [16].Podis
ver tambin el cuadro titulado
Registro de Creacin para obtener
ms informacin sobre cmo crear
nuestro propio nodo AMI (Amazon
Machine Image) a medida.
foocluster
...
Terminate EBS cluster U
foocluster (y/n)? y
...
Conclusin
La nube se ha convertido en un
recurso clave para el soporte de la
HPC. Con un caso de uso apropiado,
las ofertas basadas en la nube son
PORTADA StarCluster
16
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
[1] StarCluster: http:// web. mit. edu/ starcluster
[2] API de Boto: http:// docs. pythonboto. org
[3] HPC de Amazon: http:// aws. amazon. com/ hpc-applications/
[4] Caso de estudio de Amazon HPC:
http:// aws. amazon. com/ solutions/ case-studies/ #hpc
[5] Equipo Star del MIT: http:// web. mit. edu/ star/
[6] StarCluster en GitHub: https:// github. com/ jtriley/ StarCluster
[7] AWS Free Usage Tier: http:// aws. amazon. com/ free/
[8] Virtualenv: http:// www. virtualenv. org
[9] Imagen de mquina utilizada en este artculo:
https:// aws. amazon. com/ amis/ starcluster-base-scientific-
linux-6-2-x86-64-06
[10] Scientific Linux: https:// www. scientificlinux. org/
[11] Mtodo de Monte Carlo:
http:// en. wikipedia. org/ wiki/ Monte_Carlo_method
[12] Consola de Gestin de EC2:
https:// console. aws. amazon. com/ ec2/ home
[13] ami-d3ce7bba SL6 Amazon Machine Image:
https:// aws. amazon. com/ amis/ starcluster-base-scientific-
linux-6-2-x86-64-06
[14] ami-e2a0058b Amazon Machine Image:
https:// aws. amazon. com/ amis/ scientific-linux-6-2-x86-64
[15] Manual StarCluster:
http:// web. mit. edu/ star/ cluster/ docs/ latest/ contents. html
[16] Wiki de StarCluster:
https:// github. com/ jtriley/ StarCluster/ wiki
RECURSOS
01 $ starcluster start -s 1 foocluster -i t1.micro -n
ami-999d49f0
02 $ starcluster get foocluster /opt/sge6-fresh .
03 $ starcluster terminate foocluster
04 $ starcluster start -o -s 1 -i t1.micro -n
ami-e2a0058b imagehost
05 $ starcluster listclusters --show-ssh-status
imagehost
06 $ starcluster sshmaster imagehost -u ec2-user
07 $ sudo sed -i.bak -es/\#PermitRootLogin\ yes/
PermitRootLogin\ without-password/g
/etc/ssh/sshd_config
08 $ sudo cp -f /home/ec2-user/.ssh/authorized_keys
/root/.ssh/authorized_keys
09 $ sudo service sshd reload
10 $ exit
11 $ starcluster sshmaster imagehost
12 # yum -y install yum-fastestmirror epel-release
13 # yum -y update
14 # yum install openmpi-devel nfs-utils-lib-devel
java-1.6.0-openjdk-devel tmux zsh ksh tcsh \
15 unzip mysql-server mysql httpd emacs ntsysv
freetype-devel libpng-devel blas-devel lapack-devel \
16 atlas-devel lbzip2 bzip2-devel ncurses-devel
sqlite-devel zlib-devel libjpeg-devel mercurial
ipython \
17 python-imaging python-boto python-virtualenv
Cython python-nose python-gnutls python-pip
18 # echo exit 0 > /etc/init.d/portmap
19 # chmod +x /etc/init.d/portmap
20 # yum -y groupinstall Development Tools
21 # yumdownloader --source openmpi
22 # rpm --import
https://www.redhat.com/security/fd431d51.txt
23 # yum-builddep openmpi-1.5.4-1.el6.src.rpm
24 # rpm -ivh openmpi-1.5.4-1.el6.src.rpm
25 # rpmbuild -bb --define configure_options
--with-sge /root/rpmbuild/SPECS/openmpi.spec
26 # rpm -Uhv /root/rpmbuild/RPMS/x86_64/
openmpi-1.5.4-1.el6.x86_64.rpm \
27 /root/rpmbuild/RPMS/x86_64/
openmpi-devel-1.5.4-1.el6.x86_64.rpm
28 # echo exclude=openmpi* >> /etc/yum.conf
29 # . /etc/profile.d/modules.sh
30 # module load openmpi-x86_64
31 # ompi_info | grep -i grid
32 MCA ras: gridengine (MCA v2.0, API v2.0,
Component v1.5.4)
33 # echo module load openmpi-x86_64 >>
/etc/profile.d/zzlocal.sh
34 # echo module load openmpi-x86_64 >> /etc/
profile.d/zzlocal.csh
35 # echo export PYTHONPATH=/usr/local/lib64/
python2.6/site-packages:$PYTHONPATH >> /etc/
profile.d/zzlocal.sh
36 # echo setenv PYTHONPATH /usr/local/lib64/
python2.6/site-packages:$PYTHONPATH >> /etc/
profile.d/zzlocal.csh
37 # chmod +x /etc/profile.d/zzlocal.*
38 # . /etc/profile.d/zzlocal.sh
39 # pip-python install
--install-option=--prefix=/usr/local mpi4py
40 # pip-python install
--install-option=--prefix=/usr/local numpy
41 # pip-python install
--install-option=--prefix=/usr/local scipy
42 # pip-python install
--install-option=--prefix=/usr/local matplotlib
43 # exit
44 $ starcluster put imagehost ./sge6-fresh /opt/
45 $ starcluster listclusters
46 $ starcluster ebsimage i-xxxxxxxx
starcluster-base-scientific-linux-6.2-x86_64-06
47 ...
48 >>> Your new AMI id is: ami-d3ce7bba
49 $ starcluster terminate imagehost
Listado 10: Registro de Creacin de AMI
Hadoop PORTADA
17
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Por ejemplo, la Sloan Digital Sky Survey
est escaneando el cielo en busca de
estrellas y galaxias. En su ltima entrega
(agosto 2012), el proyecto haba colec-
cionado casi 1 billn de objetos y 100TB
de datos [2]. Comparado con el primer
catlogo del cielo de Charles Messier de
1774 con 45 objetos, la astronoma ha
experimentado un crecimiento anual del
7,3 por ciento. (La explosin de datos en
la astronoma es relativamente nueva
dentro de las ltimas dos o tres dca-
das.)
Apache Hadoop es una plataforma
para trabajar con grandes volmenes de
datos. Est escrito en Java y est disponi-
ble como software de cdigo abierto. A
da de hoy, Hadoop es utilizado por gran-
des organizaciones como Yahoo!. La
popularidad de Hadoop est en aumento,
incluso los proveedores de aerogenerado-
res daneses Vestas lo utilizan.
Arquitectura
Apache Hadoop o simplemente
Hadoop es una bestia compleja. Con-
siste en una gran cantidad de componen-
tes y su arquitectura es larga y compli-
cada. La idea bsica de Hadoop es pro-
porcionar una plataforma distribuida de
almacenamiento y computacin. Su filo-
sofa, utilizar hardware estndar. Una
instalacin de Hadoop consiste en un
nmero de ordenadores enlazados a la
vez por Ethernet. Los ordenadores o
L
os datos no son muy interesantes
por s mismos. Bits y bytes son
simplemente eso, bits y bytes
antes de que apliquemos algn tipo de
anlisis. El anlisis es un proceso que
nos sirve para extraer informacin y
conocimientos. Algunas veces, el pro-
ceso es simplemente sumar valores, aun-
que en s puede ser complejo y engo-
rroso.
Hemos tenido datos desde que la
humanidad tuvo un mtodo para guar-
darlos. Pero hasta hace poco, la cantidad
de datos haba sido pequea. La habili-
dad para almacenar datos, usando la
comodidad de los discos duros, est pro-
porcionando a las grandes corporaciones
la posibilidad de seguir cada detalle de
cada proceso dentro de su organizacin.
Esta combinacin de habilidades en
administracin de sistemas, ingeniera
de software y anlisis estadsticos, han
sido apodados Big Data.
En febrero de 2012, la cadena de tien-
das americana Target, fue capaz de pre-
decir que una consumidora adolescente
estaba embarazada antes de que sus
padres lo supieran [1]. Target dispone de
un gran almacn de datos sobre las
transacciones de sus clientes. El anlisis
de una gran cantidad de datos en tiempo
real permite una visin de lo que el
cliente va a necesitar en poco tiempo.
La comunidad cientfica ya ha sido
capaz de aplicar las tcnicas de Big Data.
nodos en el clster tienen diferentes
roles. Un nodo acta como maestro (en
grandes clsters, podemos tener ms de
un maestro) y otros nodos actan como
esclavos.
Hadoop proporciona acceso al sistema
de ficheros distribuido. La estructura del
sistema es similar al de los sistemas ope-
rativos contemporneos, donde el kernel
soporta el sistema de ficheros y las apli-
caciones de usuario acceden a los datos
a travs del sistema virtual de ficheros.
El sistema virtual oculta los detalles inte-
riores del sistema actual. En Hadoop, el
componente que proporciona el acceso
se denomina NameNode. Este compo-
nente es ejecutado por el nodo maestro.
Hadoop implementa un sistema de
archivos propio denominado Hadoop
Distributed File System (HDFS), que es,
probablemente, la eleccin de sistema de
ficheros ms popular, aunque podemos
encontrar casi una docena de ofertas
para Hadoop comerciales, cada una de
ellas con su propio sistema de archivos.
HDFS separa los archivos en bloques y
los distribuye entre los ordenadores o
nodos en el clster de Hadoop. El Name-
Node hace un seguimiento de los blo-
ques, esto quiere decir que cuando acce-
demos a un fichero, NameNode enva
una peticin a los esclavos. Un compo-
nente denominado DataNode es ejecu-
tado por los esclavos, que se encarga de
responder a las peticiones.
K
o
n
s
t
a
n
t
i
n

S
u
t
y
a
g
i
n
,

1
2
3
R
F
.
c
o
m
Experimenta el poder de la supercomputacin y la revolucin de grandes volmenes de datos con Apache
Hadoop. POR KENNETH GEISSHIRT
Excavacin de Datos con Apache Hadoop
GRAN
EXCAVACIN
Como se ha mencionado antes,
Hadoop est escrito en Java. Los desa -
rrolladores de Hadoop recomiendan utili-
zar juntos a Java de Oracle y Hadoop. La
calidad de las alternativas de cdigo
abierto (OpenJDK en particular) estn
incrementndose rpidamente y, proba-
blemente, no exista problema para ejecu-
tarlas, pero para estar ms seguros, lo
ideal sera comenzar instalando Java de
Oracle. El nico obstculo es que Ubuntu
no proporciona el paquete para Java de
Oracle por temas de licencia, as que
Java es el primer PPA a aadir.
Aunque podemos encontrar ms de un
PPA de Java de Oracle, uno muy bueno
es webupd8team, que proporciona un
conjunto de scripts para descargar e ins-
talar Oracle JRE y JDK 7. Cuatro coman-
dos para instalar Java en nuestros servi-
dores:
$ sudo add-apt-repository U
ppa:webupd8team/java
$ sudo apt-get update
$ sudo mkdir -p U
/usr/lib/mozilla/plugins
$ apt-get install U
oracle-jdk7-installer
El comando mkdir es requerido porque
el script instala un plug-in para Firefox
incluso aunque Firefox no est instalado.
La carpeta se necesita para una instala-
cin sin problemas.
Los cuatro comandos deben ser ejecu-
tados en todas las mquinas en el clster
de Hadoop. Si planeamos un clster real-
mente grande, se recomienda utilizar un
mtodo automtico de despliegue. Si nos
fijamos, estamos instalando tambin el
kit de desarrollo Java (JDK). Tal y como
veremos en este artculo, vamos a utili-
zar el compilador de Java, por lo que el
entorno de ejecucin de Java (JRE) no es
suficiente.
Instalacin
Java es un componente esencial para
Hadoop. Ubuntu tiene paquetes para
Hadoop, pero estn desactualizados.
Afortunadamente, un grupo de usuarios
de Ubuntu/ Hadoop mantienen un con-
junto de paquetes de Ubuntu que deber-
amos utilizar sin duda con PPA.
El PPA de Hadoop est divido en
varios repositorios. Es posible instalar
paquetes de ltima generacin, pero en
la mayora de situaciones, los paquetes
control de las tareas y su programacin.
SGE y Torque son utilizados normal-
mente para lo que llamamos el sistema
de cola. En un clster de Linux, los
datos son compartidos utilizando un sis-
tema de ficheros en red normalmente
NFS, aunque CIFS tambin es posible.
Cuando podemos programar una solu-
cin HPC para un clster de Linux, es
necesario encontrar una infraestructura
para coordinar un programa en paralelo.
MPI es bastante comn actualmente.
PVM fue muy popular hace una dcada y
algunos paquetes de software todava lo
requieren.
Hadoop intenta jugar el mismo rol que
un sistema de encolado, un sistema de
archivos y una infraestructura de progra-
macin en paralelo, pero en vez de utili-
zar paquetes individuales, Hadoop pro-
porciona una solucin completa. Por otra
parte, alienta a utilizar hardware estn-
dar.
Preparndose
La instalacin de Hadoop no es trivial.
Necesitamos encontrar soluciones
comerciales del tipo activar la clave e
incluso algunos proveedores de trabajo
en la nube tienen imgenes de instala-
cin preparadas para utilizar Hadoop.
En este artculo, describimos cmo
configurar un clster Hadoop con tres
nodos [3]. Un nodo se utilizar como el
maestro y los otros dos como esclavos.
La distribucin de Linux Ubuntu es
muy buena para realizar experimentos
de Hadoop. Por supuesto, podemos usar
cualquier distribucin de Linux o
incluso un miembro de la familia BSD.
La ventaja de usar Ubuntu es simple-
mente los Paquetes de Archivos Persona-
les (PPAs). Como veremos en poco
tiempo, debemos aadir un nmero de
PPAs para completar la instalacin. Utili-
zaremos Ubuntu 12.04 Precise Pango-
lin para el ejemplo de este artculo.
En principio, podemos utilizar cual-
quier servidor estndar para nuestro
clster de Hadoop. PCs con un procesa-
dor, 2GB de memoria y unos 20GB de
disco duro son suficientes para probar y
experimentar. Si estamos escasos de
hardware, podramos utilizar un servicio
en la nube. Es posible ejecutar un clster
en un servidor nico, pero la computa-
cin y sistemas de archivos distribuidos
son ms interesantes cuando aadimos
una capa de red con cierta complejidad.
El tamao del bloque por defecto para
separar archivos es 64MB, aunque pode-
mos establecerlo a cualquier valor. Los
bloques son almacenados en el sistema
de ficheros de los nodos. Es importante
comprender que un sistema de ficheros
distribuidos no es un sistema Unix. Por
ejemplo, no podemos modificar o borrar
un fichero directamente.
Un sistema de ficheros para Hadoop
debe estar pendiente de la ubicacin. En
otras palabras, Hadoop debe saber si dos
nodos estn ubicados en diferentes
armarios rack. Los bloques son almace-
nados varias veces (por defecto tres) y si
un nodo desaparece, Hadoop puede utili-
zar una de las copias. Pensemos en esto
como un sistema RAID a lo largo de la
red de trabajo. Sin embargo, Hadoop es
ms que un sistema de ficheros, siendo
capaz de programar los clculos. Hay
que tener en cuenta que necesitamos
escribir nuestro propio programa en
paralelo (en una seccin posterior,
encontraremos ejemplos de cmo hacer
esto). Un trabajo es dividido en tareas
por el componente JobTracker, ejecutn-
dose en el nodo maestro.
Las tareas son programadas para ser
ejecutadas en los nodos esclavos. El
punto crucial es que Hadoop programar
las tareas de una forma en la que se eje-
cutarn en el nodo con los datos que la
tarea necesita. El control de los esclavos
y el seguimiento de las tareas se realiza
con un componente denominado Tas-
tTracker.
Cuando tratas con hardware estndar
y clsters muy grandes la probabili-
dad de un conflicto es casi 1. Cuando un
esclavo falla, la tarea actual es reprogra-
mada por JobTracker. La tarea podr
comenzar a ejecutarse en un nodo
esclavo que tenga una copia del bloque
de datos relevante.
Comparando con HPC
Hoy en da, los clsters de Linux domi-
nan HPC y la supercomputacin. La filo-
sofa de los clsters de Linux es utilizar
hardware estndar, es decir, usar proce-
sadores estndar (tipo Intel), discos
duros y Ethernet con algunas modifica-
ciones, como un equipo de red especiali-
zado (Infiniband).
En la computacin de alto rendi-
miento, podemos encontrar varios
paquetes de software especializados. En
particular, necesitamos software para el
PORTADA Hadoop
18
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
estables son los recomendados. Estos
paquetes estn muy cerca de las ltimas
versiones disponibles.
Debemos activar el PPA de Hadoop en
todos los ordenadores en el clster e ins-
talar los paquetes. Podemos hacerlo con
estos tres comandos:
$ sudo apt-add-repository U
ppa:hadoop-ubuntu/stable
$ sudo apt-get update
$ sudo apt-get install U
hadoop pig hive hbase
El ltimo comando instala Hadoop y tres
aplicaciones (Pig, Hive y Hbase). Las
tres fueron desarrolladas utilizando
Hadoop como framework.
Una vez que hemos instalado los
paquetes, es buena idea crear un usuario
especial para controlar el acceso a
Hadoop. En este artculo, utilizaremos el
usuario con el nombre hduser. A lo largo
de nuestro clster, debemos ejecutar el
siguiente comando:
$ sudo adduser U
--group hadoop hduser
El usuario hduser no est configurado
para localizar Java y el ejecutable de
Hadoop, lo que significa que cualquier
comando relativo a Hadoop fallar. En
un ordenador con Ubuntu, con su lnea
de comandos por defecto, hay que aa-
dir las siguientes lneas al fichero de
configuracin .bashrc:
export HADOOP_HOME=U
/usr/lib/hadoop
export JAVA_HOME=U
/opt/java/64/jre1.7.0_05/
export PATH=U
$PATH:$HADOOP_HOME/bin
Por supuesto, debemos comprobar si
nuestra instalacin de Java est en
/opt/java/64/jre1.7.0_05. Puede ser inte-
resante considerar la creacin de enlaces
simblicos y actualizar el enlace cuando
los paquetes de Java sean actualizados.
El fichero .bashrc debe ser replicado a
todos los ordenadores.
Hadoop utiliza la red dentro del clster
para distribuir los ficheros y las tareas
programadas. Un error muy comn es
que cada ordenador en el clster tenga el
mismo nombre (normalmente
localhost.localdomain). Podemos usar la
direccin IP en los ficheros de
configuracin, pero los nombres propios
son ms fciles de recordar. Para un cls-
ter pequeo, debemos cambiar el nom-
bre del ordenador en el fichero /etc/hos-
tname y reiniciarlo. Por otro lado, los
nombres de todos los ordenadores en el
clster pueden ser listados en /etc/hosts.
Si es grande, es probablemente una
buena idea utilizar nombres locales y un
servidor DHCP para administrar los
nombres de host y direcciones IP.
La mayora de los scripts que inician y
detienen los componentes de un clster
de Hadoop son ejecutados en el nodo
maestro. Secure Shell (SSH) es una solu-
cin simple y segura para ejecutar remo-
tamente un script en un ordenador. Para
ejecutar un script sin escribir la contra-
sea, debemos usar claves pblicas/ pri-
vadas sin contrasea.
Un experto de seguridad probable-
mente no recomendara generar un par
de claves de SHH en el ordenador maes-
tro y copiarlos al resto del clster, pero
hay que recordar que nuestra instalacin
Hadoop slo se va a ejecutar en nuestra
red privada, con lo que el riesgo en la
seguridad es mnimo.
Configuracin
La configuracin presentada en este art-
culo es la mnima. Hadoop tiene un
enorme conjunto de configuraciones y
parmetros. Dependiendo de la carga de
trabajo y de un trilln de cosas ms,
podemos ajustar la configuracin por
defecto de Hadoop para mejorar su ren-
dimiento. La configuracin que se utilice
debe ser replicada a todos los ordenado-
res en el clster.
El sistema de archivos distribuido
repartir los ficheros en pedazos ms
pequeos o en bloques a lo largo del
clster. Cada mquina recibir algunos
de estos bloques. Deben ser almacena-
dos en alguna parte en el disco duro
fsico de la mquina. Hay que tener pre-
sente que un sistema de archivos distri-
buido no es el tpico sistema de ficheros
de Linux y que no podemos acceder a l
utilizando comandos tpicos como ls y
cat.
A pesar de que no podemos acceder
directamente a los ficheros en el sistema
distribuido, debemos crear un directorio
para este sistema en el disco duro local.
La cuenta hduser viene muy bien en este
caso porque podemos utilizarla para res-
tringir el acceso a los bloques almacena-
dos localmente. Los siguientes coman-
dos crean un directorio y establecen las
restricciones oportunas.
$ sudo mkdir -p U
/app/hadoop/tmp
$ sudo chown U
hduser.hadoop U
/app/hadoop/tmp
El nombre del fichero /app/ hadoop/ tmp
es elegido aleatoriamente. Si queremos
otra ubicacin, podemos cambiarla sin
problemas. En un clster Hadoop para
conjuntos de datos muy grandes, pode-
mos instalar un disco duro especial para
el sistema de ficheros distribuido. Por
otro lado, merece la pena considerar qu
sistema de ficheros de Linux utilizar y
sus parmetros. Podemos ganar algo de
rendimiento poniendo a punto los par-
metros del sistema. El tamao de bloque
de Hadoop (64MB por defecto) puede
afectar a los parmetros del sistema de
archivos de Linux.
Los ficheros de configuracin de
Hadoop estn ubicados en el directorio
/etc/hadoop/conf. El fichero masters le
dice a Hadoop cul es el ordenador
maestro y los ficheros slaves listan todos
los ordenadores que pueden ejecutar
tareas. Para un clster pequeo, el orde-
nador maestro puede ser un esclavo. En
un clster grande, el ordenador maestro
utilizar mucha potencia de procesa-
miento para programar las tareas, por lo
que puede ser complicado que pueda
contribuir al proceso del resto de tareas.
Debido a que en este ejemplo instala-
mos un clster de tres nodos, debera-
mos aadir el maestro al fichero de sla-
ves. Es posible aadir ms ordenadores o
removerlos con una herramienta de lnea
de comandos. Deberamos ver slaves
como el conjunto inicial de ordenadores
de nuestro clster.
Tres ficheros de configuracin son
requeridos para iniciar Hadoop. Debido
a que est escrito en Java, probable-
mente no sea una sorpresa que los tres
ficheros de configuracin estn en for-
mato XML.
El primer fichero de configuracin es
core-site.xml. El parmetro ms impor-
tante (o propiedad, tal y como se deno-
mina en el lenguaje de Hadoop) especi-
fica la ubicacin donde el sistema de
ficheros distribuido puede almacenar
Hadoop PORTADA
19
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
<property>
<name>mapred.job.trackerU
</name>
<value>master:54311U
</value>
</property>
El fichero de configuracin para persona-
lizar nuestro clster es hadoop-env.sh. El
parmetro ms importante es
JAVA_HOME la misma variable de
entorno utilizada con el usuario hduser
para definir el directorio de JAVA y
debemos reutilizarla en este fichero de
configuracin.
Antes de iniciar Hadoop por primera
vez, debemos preparar y/ o formatear
el sistema de ficheros distribuido. Para
formatearlo, hay que autentificarse
con el usuario hduser y ejecutar el
siguiente comando en el nodo maes-
tro:
$ hadoop namenode -format
Finalmente, nuestro clster Hadoop est
listo para ser lanzado. En el nodo maes-
tro, hay que ejecutar los siguientes
comandos:
$ start-dfs.sh
$ start-mapred.sh
El primer comando inicia el sistema de
ficheros distribuido y el segundo inicia
el programador y los procesos relacio-
nados. Los dos scripts iniciarn proce-
sos relevantes, de forma remota, en los
nodos esclavos.
Si queremos detener nuestro clster,
utilizaremos los comandos stop-dfs.sh y
stop-mapred.sh.
Datos de Prueba
En las secciones anteriores, nos centra-
mos en la instalacin y configuracin de
nuestro clster de Hadoop. Ahora es
momento de poner el sistema a trabajar.
Hadoop nos permite analizar grandes
cantidades de datos y nos proporciona
una interfaz web para monitorizar el
clster (Figura 1 y 2).
Es posible que ya dispongamos de una
gran cantidad de datos que queramos
analizar. Para hacer la siguiente seccin
un poco ms interesante, os mostrare-
mos cmo generar un conjunto de datos
de prueba.
La Oficina de Estadsticas de Trans-
porte de los Estados Unidos recopila
datos sobre todos los vuelos del pas.
Este conjunto de datos est disponible
pblicamente [4] y nos los podemos des-
cargar mes a mes. Se graban como unos
110 valores diferentes de cada vuelo y
nos podemos encontrar unos 500.000
cada mes. Por cada viaje, podemos
encontrar sus datos de vuelo, el origen,
el destino y si se retras.
Cuando descargamos los datos de
vuelo de un mes, obtenemos un fichero
ZIP. Dentro de este fichero ZIP, encontra-
mos una descripcin general
(readme.html) y sus datos. Cada vuelo
est representado por una lnea con valo-
res separados por comas. Un fichero
puede ser preparado por Hadoop utili-
zando los siguientes comandos:
bloques. El directorio /app/ hadoop/ tmp
fue creado previamente y debe utilizarse
en el fichero de configuracin.
<property>
<name>hadoop.tmp.dirU
</name>
<value>/app/hadoop/tmpU
</value>
</property>
El sistema de ficheros distribuido replica
los bloques, es decir, los almacena en
bloques en ms de un ordenador. El
nmero de copias es controlado por el
fichero de configuracin hdfs-site.xml.
Debido a que el clster lo forman tres
ordenadores, podemos tener tres copias
de los bloques:
<property>
<name>dfs.replicationU
</name>
<value>3</value>
</property>
Es posible tener un nico ordenador o
dos. Si elegimos instalar un clster ms
pequeo, debemos ajustar el valor en el
fichero de configuracin hdfs-site.xml.
El ltimo fichero de configuracin es
mapred-site.xml. Utilizaremos este
fichero para listar las mquinas que
actan como programadoras para los tra-
bajos de Map/ Reduce. El seguimiento de
trabajos escucha en un puerto TCP para
comunicarse con los clientes, por lo que
el puerto debe ser incluido. El puerto por
defecto es 54311:
PORTADA Hadoop
20
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 1: Hadoop proporciona una interfaz web para monitorizar nuestro clster.
$ unzip -o On_Time_On_TimeU
_Performance_2012_?.zip
$ grep ^[0-9] On_Time_OnU
_Time_Performance_2012_?.csv U
| tr -d\ > On_TimeU
_Performance_2012_1H.csv
El comando grep es necesario porque
cada fichero comienza con una cabecera.
El resto de la lnea comienza con el ao
de vuelo. Los valores estn comentados
y con el comando tr, eliminamos las
comillas. El fichero On_Time_Perfor-
mance_2012_1H.csv tiene un tamao de
1,3GB y consiste en ms de 3 millones de
lneas. Esto puede parecer un fichero con
gran cantidad de datos, pero en realidad
es relativamente pequeo en el mundo
de los negocios.
El fichero On_Time_Perfor-
mance_2012_1H.csv se divide en 21 blo-
ques (1,3GB/ 64MB). Los bloques son
distribuidos sobre los tres nodos (maes-
tro y dos esclavos) as que cada ordena-
dor en el clster tendr siete bloques pri-
marios, aunque cada ordenador recibir
adems los bloques primarios de los
otros como copia de seguridad. Esto
implica que copiar un fichero de 1,3GB
al sistema de ficheros distribuido, incre-
mentar bastante la actividad de la red.
Cuando copiamos los ficheros de datos
al sistema de Hadoop, la divisin y repli-
cacin comienza. Como podrs imagi-
nar, un fichero de 1,3GB se toma bas-
tante tiempo para su distribucin. Pode-
mos copiar el archivo al sistema de fiche-
ros distribuido de Hadoop con el
siguiente comando:
$ hadoop dfs -copyFromLocal U
On_Time_Performance_2012_H1.U
csv /
La primera vez que copiamos un fichero
al clster, puede ser interesante compro-
bar los registros del sistema en uno de
los esclavos. Las aplicaciones de Java
son conocidas por su habilidad de pro-
ducir muchos mensajes de registro y
Hadoop no es una excepcin a esa regla.
Map/ Reduce
La programacin distribuida y en para-
lelo son viejas disciplinas de la ciencia
de la computacin. Es inherentemente
difcil desarrollar un programa que abar-
que ms de un procesador y no importa
si el procesador est localizado en el
mismo ordenador o si est separado por
una red.
La paralelizacin automtica ha sido
considerada como el santo grial de las
ciencias de la computacin y del
desarrollo de compiladores por dca-
das. No han ocurrido grandes avances
en esta rea, a pesar de la gran canti-
dad de recursos utilizados.
Hadoop es un intento de abordar el
problema de la paralelizacin. No se pre-
tende que pueda resolver el problema
general sino que sirva de plataforma de
paralelizacin o como framework. Para
un desarrollador de software, Hadoop
presenta una determinada tcnica o
paradigma. Este paradigma no es nuevo
y suele tener varios nombres, aunque en
Hadoop, se denomina Map/ Reduce. El
trmino fue acuado originalmente por
Google para sus implementaciones de
modelo de programacin para big data,
siendo un patrn de diseo comn para
la programacin funcional. La idea de
Map/ Reduce es transformar un algo-
ritmo en dos fases.
La fase map toma un subconjunto de
datos y los mapea. Mapear consiste en
encontrar datos relevantes y ejecutar
alguna computacin con ellos. El mapeo
es realizado por un nmero indepen-
diente de asignaciones. En Hadoop, los
mapeos son ejecutados como tareas en
los esclavos del clster. La fase de reduce
combina los datos asignados de cada
mapeador.
Es importante notar que los mapeado-
res trabajan independientemente. Esto
significa que no todos los algoritmos
encajarn en el paradigma de Map/
Hadoop PORTADA
21
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 2: Utiliza el navegador web para monitorizar las tareas que estn ejecutndose. Este clster tiene actualmente dos tareas.
tenga una sobrecarga, si la fase de
mapear toma mucho ms tiempo que la
fase de reducir, el paradigma Map/
Reduce nos promete que aumentaremos
la velocidad de forma lineal.
Lo interesante es que Hadoop divide
automticamente nuestro trabajo en
mapas y adems reduce las tareas.
Debido a que los ficheros son divididos y
distribuidos en bloques a los ordenado-
res del clster, Hadoop dividir el trabajo
en varias tareas que operarn con los
bloques.
Los datos de prueba presentados en la
seccin anterior pueden ser analizados
por el algoritmo Map/ Reduce. Conside-
remos la siguiente consulta: queremos
calcular cada cuntas veces un aero-
puerto tiene una llegada en los primeros
seis meses de 2012. Si tenemos conoci-
mientos de SQL, podramos cargar el
conjunto de datos en una base de datos
relacional y ejecutar la siguiente con-
sulta (asumiendo que cada valor en el
conjunto de datos representa un atributo
en la tabla):
SELECT Dest, COUNT(*) U
FROM OnTime U
GROUP BY Dest
El atributo Dest es el aeropuerto destino.
En el conjunto de datos, el aeropuerto es
almacenado utilizando el cdigo de tres
letras del aeropuerto. Por ejemplo, LAX
es el Aeropuerto Internacional de Los
Angeles y DEN, el Aeropuerto de Denver.
Implementar la consulta utilizando
Map/ Reduce es casi trivial. El Listado 1
muestra la implementacin de Hadoop.
La fase de mapear emitir el cdigo de
aeropuerto y la constante 1 por cada
ocurrencia. El fichero de datos consiste
en valores separados por comas y el
Reduce. En el mundo de HPC, este tipo
de algoritmos se refieren a menudo
como paralelas vergonzosas.
Consideremos el siguiente ejemplo:
calcular la suma de un nmero de nme-
ros. Es posible dividir la suma en nme-
ros de sumas de un subconjunto de
nmeros. Imaginemos que queremos
aadir 100 nmeros. Podemos dar 10
nmeros a 10 personas y pedirles a ellos
que los sumen. Cada persona es un
mapeador y trabajan independiente-
mente. Cuando terminen, nos darn los
subtotales y entonces podremos aadir
10 nmeros para encontrar el total.
Noso tros actuaramos como un reductor.
Como podemos ver, la implementa-
cin de Map/ Reduce en el problema de
las sumas aumentara nuestra velocidad
casi 10 veces si tuviramos a 10 personas
y casi 15 veces si tuviramos a 15 perso-
nas. Aunque la distribucin de trabajo
PORTADA Hadoop
22
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
01 package com.linuxmagazine;
02
03 import java.io.*;
04 import java.util.*;
05
06 import org.apache.hadoop.fs.Path;
07 import
org.apache.hadoop.filecache.DistributedCache;
08 import org.apache.hadoop.conf.*;
09 import org.apache.hadoop.io.*;
10 import org.apache.hadoop.mapred.*;
11 import org.apache.hadoop.util.*;
12
13 public class OnTime {
14 public static class Map extends MapReduceBase
implements Mapper<LongWritable, Text, Text,
IntWritable> {
15 private final static IntWritable one = new
IntWritable(1);
16
17 public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
18 String line = value.toString();
19 String[] strArr = line.split(,); // CSV file
20 Text airport = new Text(strArr[14]); // Dest
column
21 output.collect(airport, one);
22 }
23 }
24
25 public static class Reduce extends
MapReduceBase implements Reducer<Text, IntWritable,
Text, IntWritable> {
26 public void reduce(Text key, Iterator<IntWritable>
values, OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
27 int sum = 0;
28 while (values.hasNext()) {
29 sum += values.next().get();
30 }
31 output.collect(key, new IntWritable(sum));
32 }
33 }
34
35 public static void main(String[] args) throws
Exception {
36 JobConf conf = new JobConf(OnTime.class);
37 conf.setJobName(ontime);
38
39 conf.setOutputKeyClass(Text.class);
40 conf.setOutputValueClass(IntWritable.class);
41
42 conf.setMapperClass(Map.class);
43 conf.setCombinerClass(Reduce.class);
44 conf.setReducerClass(Reduce.class);
45
46 conf.setInputFormat(TextInputFormat.class);
47 conf.setOutputFormat(TextOutputFormat.class);
48
49 FileInputFormat.setInputPaths(conf, new
Path(args[0]));
50 FileOutputFormat.setOutputPath(conf, new
Path(args[1]));
51
52 JobClient.runJob(conf);
53 }
54 }
Listado 1: OnTime.java
mapeo debe dividir la lnea y encontrar
el cdigo de aeropuerto. En el Listado 1,
la fase de mapear es implementada por
la subclase Map.
La fase de reduccin suma valores por
cada aeropuerto. Esto significa que el
reductor aade un nmero de 1s y emite
resultados. En el Listado 1 se muestra la
fase de reduccin con la subclase
Reduce.
Para optimizar la consulta, se intro-
duce un combinador. Un combinador es
un reductor que se ejecuta en un nodo
esclavo. En vez de transferir varios 1s, el
combinador aade los 1s y emite el sub-
total al nodo maestro. Un combinador no
es siempre posible, pero en este caso s.
En el mtodo main podemos encontrar
cmo son aadidos los mapeadores,
combinadores y reductores.
La implementacin de Hadoop es una
de las consultas realizadas en Java.
Antes de que podamos enviar alguna a
Hadoop, necesitamos compilar y enlazar.
Los siguientes comandos lo realizan:
$ javac -classpath U
/usr/lib/hadoop/U
hadoop-core-1.0.2.jar U
-d ontime_classes U
OnTime.java
$ jar -cvf ontime.jar U
ontime_classes
Los sistemas de ficheros distribuidos no
permiten sobrescribir archivos. Debemos
borrar los ficheros antiguos antes de eje-
cutar nuestro trabajo de Map/ Reduce.
Despus de que la consulta sea ejecu-
tada, podremos encontrar la salida en el
sistema de ficheros distribuido. Durante
la ejecucin del trabajo, Hadoop impri-
mir dnde encontrar el resultado. Com-
binar estos pasos nos lleva a los siguien-
tes comandos:
$ hadoop dfs -rmr /output
$ hadoop jar ontime.jar U
com.linuxmagazine.OnTime U
/On_Time_Performance_U
2012_H1.csv /output
$ hadoop dfs -cat U
/output/part-00000
Aplicaciones
Durante la instalacin de nuestro clster
de Hadoop, se instalaron tres aplicacio-
nes: Pig, Hive y Hbase. Pig es un len-
guaje de programacin con ventajas para
las capacidades de Map/ Reduce de
Hadoop. Es un lenguaje de flujo de datos
que no se parece a C++ o PHP. Est
ms cerca de una programacin funcio-
nal. Los lenguajes de programacin fun-
cional tienen una caracterstica muy
interesante: las funciones no tienen efec-
tos colaterales. Esto implica que un pro-
grama escrito en un lenguaje funcional
es mucho ms fcil de paralelizar. Ade-
ms de esto, los lenguajes funcionales y
de flujo de datos pueden ser ms fciles
de aprender para estadsticos y matem-
ticos. Un programa en Pig est reescrito
como un conjunto de tareas de Map/
Reduce. Es posible cargar ficheros CSV
en Pig y realizar operaciones. La con-
sulta indicada en las secciones anteriores
puede ser reescrita de esta forma:
A = LOAD /On_Time.csv AS U
(Year:chararray,Month:U
chararray,DayofMonth:U
chararray,Dest:chararray);
B = GROUP A BY Dest;
C = FOREACH B GENERATE COUNT(A);
Hive es un almacn de datos que nos
proporciona una sintaxis parecida a SQL
para consultar los datos. Las consultas
son reescritas automticamente en tareas
de Map/ Reduce. Podemos crear tablas y
cargar ficheros CSV en ellas. Nuestros
famosos datos de prueba pueden ser
analizados por las tres siguientes senten-
cias. La tercera sentencia la consulta
actual se parece mucho a la sentencia
de SQL que vimos en la descripcin de
los datos de prueba.
CREATE TABLE OnTime
(Year STRING, Month STRING,U
DayofMonth STRING, Dest STRING)U
ROW FORMAT DELIMITED FIELDS U
TERMINATED BY 44 LINES U
TERMINATED BY \n;
LOAD DATA LOCAL INPATH U
On_Time.csv OVERWRITE INTO U
TABLE OnTime;
SELECT Origin,COUNT(*) U
FROM OnTime GROUP BY Origin;
Conclusin
Hadoop es una plataforma para el alma-
cenamiento y la computacin distri-
buida. Podemos decir que la paraleliza-
cin est alineada con la distribucin de
los datos. Aunque no es una paraleliza-
cin completamente automatizada,
Hadoop aade varias herramientas y tc-
nicas ingeniosas para la programacin
en paralelo.
Si nuestro conjunto de datos pueden
ajustarse dentro de la memoria fsica de
un ordenador, bastara con escribir un
simple programa que leyera desde la
memoria. Pero si tenemos conjuntos de
datos muy grandes, merece la pena el
esfuerzo para utilizar Hadoop. No es slo
el santo grial de la programacin en para-
lelo, adems, ofrece ayuda para estar
cada vez ms cerca. Aplicaciones como
Pig y Hive nos llevan un paso adelante,
ocultando la complejidad de la computa-
cin distribuida y en paralelo.
El paradigma de Map/ Reduce es muy
poderoso si nuestras soluciones pueden
ser descritas en sus trminos. A la vez
que Hadoop progresa, nuevas aplicacio-
nes nos ayudarn a que los que nos dedi-
camos a esto tomemos mejores decisio-
nes.
Hadoop PORTADA
23
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
[1] Como Target supo que una chica adolescente estaba embarazada antes de que su
padre lo supiera:
http:// www. forbes. com/ sites/ kashmirhill/ 2012/ 02/ 16/ how-target-figured-out-a-teen-
girl-was-pregnant-before-her-father-did/
[2] SDSS: http:// www. sdss3. org/ dr9/
[3] Tutoriales Hadoop de Michael Noll: http:// www. michael-noll. com/ tutorials
[4] TransStats: http:// www. transtats. bts. gov/ Fields. asp?Table_ID=236
[5] Hadoop: La gua definitiva, 2 edicin. T. White. OReilly Media, 2010.
[6] HBase: La gua definitiva. L. George. OReilly Media, 2011.
[7] Programando en Pig. A. Gates. OReilly Media, 2011.
[8] Procesamiento intensivo de texto en datos con MapReduce. J. Lin & C. Dyer. Mor-
gan&Claypool, 2010.
RECURSOS
O
penSSL[1] hace uso de la entrada
y la salida estndar y permite un
amplio rango de parmetros, tales
como conmutadores en lnea de rdenes,
variables de entorno, tuberas nombradas,
descriptores de archivos y archivos. Pode-
mos aprovecharnos de estas caractersti-
cas escribiendo scripts de Bash [2]
(Bourne-Again Shell) que automaticen
tareas, tales como las pruebas de conexin
SSL/ TLS (Capa de Zcalo Seguro / Seguri-
dad de Capa de Transporte Secure Socket
Layer / Transport Layer Security), las con-
versiones en masa entre diferentes forma-
tos o claves de cifrado y certificados, fir-
mado/ cifrado por lotes de archivos, audi-
tora de contraseas de archivos protegi-
dos y la implementacin o prueba de una
PKI (Infraestructura de Clave Pblica
Public Key Infrastructure).
Las herramientas OpenSSL proporcio-
nan muchos mdulos cada uno de los
cuales realiza una tarea especfica. Cada
mdulo no es un ejecutable separado, sin
embargo se selecciona con el primer par-
metro del ejecutable openssl. Por otro
lado, cada mdulo tiene una pgina de
manual separada. Por ejemplo, un mdulo
PRCTICO OpenSSL y Bash
26
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
llamado x509 gestiona certificados digita-
les X.509 y un mdulo llamado pkcs12
gestiona paquetes PKCS12.
Para usar x509, debemos ejecutar la
siguiente orden:
openssl x509 -param1 U
param1 valor
pero para ver su pgina de manual, debe-
mos teclear: man x509.
Probar conexiones
SSL/ TLS
OpenSSL proporciona tres mdulos que
nos permiten probar conexiones SSL:
s_client, s_server y s_time. Los dos prime-
ros, tal y como sugieren sus nombres,
simulan un cliente y un servidor en una
conexin SSL. El tercero es para las pruebas
de tiempo de conexin. Empezaremos con
una mirada ms atenta al mdulo s_client.
s_client es particularmente til para
comprobar qu protocolos y qu cifrados
est de acuerdo en utilizar el servidor. Esta
informacin es til en seguridad y en
auditoras de funcionalidad. Por ejemplo,
podemos usar esta informacin de proto-
colo para buscar servidores que no acep-
ten un protocolo legitimado o un cifrado,
de manera que evita la conexin de un
cliente legitimado. Tambin podemos
localizar servidores que aceptan protoco-
los o cifrados dbiles y pueden permitir
ataques malintencionados. Con una
pequea ayuda de Bash, podemos auto-
matizar totalmente estos procesos.
Asumimos que los nombres del cliente
y el servidor son client y server y que el
servidor escucha las conexiones SSL/ TLS
en el puerto 443.
Para comprobar qu protocolos acepta
server, podemos utilizar los siguientes
parmetros: -ssl2, -ssl3, -tls1, -no_ssl2, -
no_ssl3, o -no_tls1.
Dado que se sabe que SSL2 tiene debili-
dades en la seguridad, podemos intentar
conectar con el servidor usando la orden
siguiente:
openssl s_client -connect U
server:443 -no_ssl3 -no_tls1
Si el servidor acepta cualquier protocolo
distinto de SSL3 o TLS1, la orden anterior
abre una conexin y espera los datos.
(Desde luego, este enfoque no es ideal si
el plan es incluir la orden en un script de
Bash). Para cerrar la conexin inmediata-
mente despus de haberla establecido,
escribimos en la entrada estndar de
s_client:
echo x | openssl s_client U
-connect server:443 U
-no_ssl3 -no_tls1
Usar las herramientas de OpenSSL con Bash
CRPTICO
El cifrado (o criptografa) es una parte importante de la seguridad en TI
y OpenSSL es un conjunto de herramientas bien conocido para Linux.
Los expertos lo usan porque es libre, tiene unas enormes capacidades y
es sencillo de utilizar en script de Bash. POR MARCIN TEODORCZYK
M
i
c
h
a
l

B
o
u
b
i
n
,

1
2
3
r
f
27
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
De igual manera podemos comprobar
cifrados permitidos con el parmetro -
cipher. Para comodidad del usuario,
OpenSSL permite especificar suites de
cifrado (por ejemplo: DES-CBC3-SHA), o
grupos (por ejemplo LOW, MEDIUM,
HIGH, NULL, o ALL). Buscar nombres de
grupos y cifrados con man ciphers.
Para comprobar si el servidor acepta
conexiones usando cifrados de un grupo
NULL o LOW, usamos:
echo x | openssl s_client U
-connect $server:443 U
-cipher NULL,LOW
En los scripts de Bash es una buena idea
ejecutar mdulos OpenSSL con un
tiempo mximo especificado. En caso
contrario, cuando no se puede resolver
un nombre de anfitrin, el script se
queda colgado mucho tiempo. Una utili-
dad especial de Linux nos permite ejecu-
tar cualquier orden sin tiempo lmite.
Sorprendentemente la utilidad se llama
timeout. Por ejemplo, para comprobar si
se puede establecer una conexin SSL2
sin esperar ms de 10 segundos, pode-
mos usar:
echo x | timeout 10 openssl U
s_client -connect U
server:443 -ssl2
Finalmente, para automatizar ms la
orden, podemos usar la variable $? para
comprobar el retorno de la ltima orden
ejecutada por Bash. Si se ha establecido la
conexin, OpenSSL devuelve 0.
El Listado 1 muestra un script sencillo
realizado hace tiempo con todo lo necesa-
rio. El script lee nombres de anfitrin
desde la salida estndar y comprueba si se
puede establecer otra conexin distinta de
SSL3 o TLS1 en el puerto 443. Espera
hasta tres segundos. Los anfitriones que
permiten este tipo de conexiones se escri-
ben en un archivo bad_protocol.txt. Igual-
mente, los anfitriones que permiten cone-
xiones con cifrados NULL o LOW se listan
en bad_cipher.txt.
Manejar formatos
PEM/ DER y PKCS12
En el cifrado pblico, pares de claves y
certificados digitales se usan unos cuantos
formatos. Sin entrar en detalles, los forma-
tos ms comunes para mi red son PEM,
DER, PKCS12 o JKS. De ellos, slo JKS no
est soportado por el software OpenSSL.
PEM y DER son formatos codificados
PEM est codificado en formato Base64.
DER es binario. PKCS12 es un contenedor
que puede mantener claves pblicas y pri-
vadas, as como certificados firmados y
cadenas de certificados.
Para convertir archivos entre formatos
PEM y DER podemos usar los parmetros
-inform y -outform. Por ejemplo, para
convertir todos los certificados X.509 de
PEM a DER, podemos usar el siguiente
bucle:
for file in *.pem;
do openssl x509 U
-inform PEM -in U
$file -outform DER U
-out $file.der;
done
Otra tarea comn es extraer claves/ certifi-
cados de un paquete PKCS12, que normal-
mente est protegido con una contrasea.
Se puede manejar como una operacin
con la opcin -passin de Bash y OpenSSL.
Esta opcin permite especificar contrase-
as para acceder a datos en archivos pro-
tegidos con contrasea de cinco maneras.
Es til no slo con PKCS12, sino para cual-
quier accin que requiera una contrasea
cifrada, por ejemplo, claves privadas cifra-
das o datos.
Primero, podemos especificar una con-
trasea como pass:password_text, en cuyo
caso password_text es la contrasea real.
Esto no es un mtodo seguro, dado que la
contrasea se almacena en un histrico de
Bash y se puede ver con una orden ps
durante la ejecucin. Segundo, podemos
especificar la contrasea con env:var. Este
mtodo es ms seguro, porque la contra-
sea se oculta en una variable de entorno
var. Otro enfoque es almacenar la contra-
sea como file:pathname, lo que indica a
OpenSSl que lea la contrasea en la pri-
mera lnea de pathname. Si usamos
fd:number, provocamos que OpenSSL lea
la contrasea del descriptor de archivos
number. Finalmente, podemos simple-
mente usar stdin para leer las contraseas
de la entrada estndar.
Lo siguiente es extraer todos los certifi-
cados de los archivos PKCS12 protegidos
con contrasea en un directorio de trabajo
y almacenarlos sin proteccin de contra-
sea. Esto se puede hacer de la siguiente
manera:
for file in *.p12; do
openssl pkcs12 U
-in $file U
-passin file:U
$file.pass U
-nokeys -nodes U
-out $file.nokeys
done
Asumiendo que tenemos la contrasea
para cada archivo PKCS12 escrita en un
archivo con la extensin .pass.
Cifrado y Descifrado en
Masa
Las tareas ms comunes de la criptografa
incluyen el cifrado y descifrado de archi-
vos. El cifrado simtrico usa una clave
para cifrar y descifrar: una clave pblica
para cifrar y una clave privada para desci-
frar (normalmente implementada con cer-
tificados PKI y X.509).
El cifrado simtrico es ms rpido que el
asimtrico y es una mejor eleccin cuando
no necesitamos proporcionar acceso
pblico a la clave.
Para cifrar un archivo plain.txt de
manera simtrica y escribir la salida en
cipher.enc, podemos usar la siguiente
orden:
openssl [ciphername] U
-a -salt U
-in plain.txt -out U
cipher.enc
OpenSSL y Bash PRCTICO
01 #!/bin/bash
02 while read server ; do
03 timeout 3 openssl s_client -connect $server:443 -no_ssl3 -no_tls1
04 if [ $? -eq 0 ] ; then
05 echo $server >> bad_protocol.txt
06 fi
07 timeout 3 openssl s_client -connect $server:443 -cipher NULL,LOW
08 if [ $? -eq 0 ] ; then
09 echo $server >> bad_cipher.txt
10 fi
11 done
Listado 1: Comprobacin de protocolos permitidos
Podemos descifrar todos los archivos .txt
en el directorio actual y escribirles en el
directorio ../ dec con:
for file in *.txt; do
openssl aes-256-cbc -d -a U
-salt -in $file -out U
../dec/$file U
-passin file:pass
done
de nuevo, asumiendo que tenemos una
contrasea en el archivo pass.
OpenSSL y la Entrada/
Salida Estndar
Mantenindonos en la filosofa de Unix,
cada argumento que se pasa con el par-
metro -in, se pude pasar tambin usando
la entrada estndar. Si no especificamos la
salida con el parmetro -out, sta se
escribe en la salida estndar. Por lo tanto,
podemos usar OpenSSL para procesar sali-
das de otras rdenes y generar entradas
desde otros programas con una tubera.
Para comprobar si un certificado con el
nmero de serie 44A2FC741D8C1755 ha
sido revocado, podemos usar la siguiente
orden:
curl -s http://localhost/U
crl.pem | U
openssl crl -text U
-noout | grep U
Serial Number: U
44A2FC741D8C1755
Esta orden recuperar una CRL (Lista de
Revocacin de Certificados Certificate
Revocation List) y la decodificar con
OpenSSL. Despus haremos grep para un
nmero de serie. De manera parecida a los
El sistema preguntar por la contrasea
de cifrado, la cual se debe teclear cuando
se descifre posteriormente. No es la
mejor opcin para operaciones en masa,
pero se han descrito distintos mtodos
para especificar una contrasea a
OpenSSL.
En consecuencia, para cifrar todos los
archivos .txt en el directorio actual y escri-
birles en el directorio ../ enc con la cifra
aes-256-cbc, podemos usar el siguiente
bucle (asumiendo que se escribe la contra-
sea en el archivo pass):
for file in *.txt; do
openssl aes-256-cbc U
-a -salt U
-in $file -out U
../enc/$file U
-passin file:pass
done
PRCTICO OpenSSL y Bash
28
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
01 function create_config {
02 {
03 echo HOME = .
04 echo RANDFILE = $ENV::HOME/.rnd
05
06
07 ...
08 [cdigo no relevante]
09 ...
10
11
12 echo oid_section = new_oids
13 echo subjectKeyIdentifier=hash
14 echo authorityKeyIdentifier=keyid,issuer
15 echo proxyCertInfo=critical,language:
id-ppl-anyLanguage,pathlen:3,policy:foo
16 } > $config
17 }
18
19 function create_root_ca {
20 local keysize=$1
21 local country=$2
22 local org=$3
23 local name=$4
24 local days=$5
25 local certfile=$6
26 local keyfile=$7
27 openssl req -newkey rsa:$keysize -x509
-days $days -keyout $keyfile -nodes
-out $certfile -config $config
-subj /C=$country/O=$org/CN=$name
28 return $?
29 }
30
31 function create_crl {
32 local cakey=$1
33 local cacert=$2
34 local crlfile=$3
35 openssl ca -gencrl -config $config -keyfile $cakey
-cert $cacert -out $crlfile
36 }
37
38 function create_client_req {
39 local keysize=$1
40 local country=$2
41 local org=$3
42 local name=$4
43 local keyfile=$5
44 local reqfile=$6
45 openssl req -new -newkey rsa:$keysize -nodes
-keyout $keyfile -out $reqfile
-config $config
-subj /C=$country/O=$org/CN=$name
46 }
47
48 function sign_client_req {
49 local clientreq=$1
50 local days=$2
51 local cacert=$3
52 local cakey=$4
53 local clientcert=$5
54 openssl x509 -req -days $days -CA $cacert
-CAkey $cakey -CAcreateserial
-in $clientreq -out $clientcert
55 }
56
57 function revoke_client_cert {
58 local clientcert=$1
59 local cakey=$2
60 local cacert=$3
61 openssl ca -revoke $clientcert -keyfile $cakey
-cert $cacert -config $config
62 }
63
64 function get_cacountry {
65 cacountry=DC
66 }
67
68 function get_caorg {
69 caorg=Dummy org
70 }
71
72 function get_caname {
73 caname=Dummy CA
74 }
Listado 2: Prueba de una PKI
anteriores scripts de Bash, podemos aa-
dir un timeout y comprobar la salida de la
orden grep con la variable $?.
Auditar Contraseas de
Cifrado
La clave privada debera al menos asegu-
rarse con una contrasea. Frecuente-
mente, los archivos PKCS12 tambin se
aseguran con contraseas. Con OpenSSL y
Bash, podemos hacer una rpida compro-
bacin de las contraseas que se usan
para proteger estos archivos. Asumimos
que existe un archivo de texto con las con-
traseas ms comunes, una en cada lnea,
llamado passwords.txt. Podemos compro-
bar cada archivo protegido con contrasea
en el directorio actual de la siguiente
manera:
while read pass; do
for file in *.p12; do
openssl pkcs12 -in $file U
-noout -passin pass:$pass U
2>/dev/null
if [ $? -eq 0 ] ; then
echo Guessed password U
for $file: $pass
fi
done
done < passwords.txt
Probar PKI
La ltima gran capacidad de OpenSSL es
implementar una Infraestructura de Clave
Pblica Public Key Infrastructure (PKI).
Una PKI frecuentemente juega un papel
crucial en la seguridad y OpenSSL se
puede usar para implementar y probar
una PKI.
Primero, podemos usar OpenSSL para
generar un par de claves y sus correspon-
dientes CSR (Peticin de Firma de Certifi-
cado Certificate Signing Request).
Segundo, podemos firmar CSR, por medio
de la creacin de un certificado vlido.
Tercero, podemos revocar y generar los
CRL. Cuarto, podemos firmar/ cifrar y veri-
ficar/ descifrar. Finalmente, podemos cam-
biar parmetros al vuelo, manipulando
valores tales como algoritmos, longitudes
de claves o contenido DN. Podemos usar
estos datos como entradas para otras apli-
caciones.
El Listado 2 muestra unas cuantas fun-
ciones de ejemplo que podemos usar
para probar varios elementos de una PKI.
La funcin create_config se ha cortado
para facilitar la lectura. Podemos usar el
contenido de nuestro archivo de
configuracin de OpenSSL predetermi-
nado para hacer ms ajustes de
configuracin. El archivo de
configuracin generalmente se denomina
openssl.cnf y se encuentra en /etc.
De manera predeterminada, OpenSSL
lee su archivo de configuracin en una
ubicacin especificada (normalmente /etc/
openssl.cnf), pero para este propsito es
ms sencillo crear un archivo de
configuracin al vuelo. La funcin del
script create_config se hace cargo de esto
escribiendo el archivo de configuracin en
./ config. Posteriormente el archivo creado
por esta funcin se apunta a OpenSSL con
el parmetro -config.
Los nombres de las siguientes funciones
que tenemos create_root_ca, create_crl,
create_client_req, sign_client_req y
revoke_client_cert, son suficientemente
aclaratorios. Todas estas funciones toman
parmetros que especifican cosas tales
como un DN (Nombre Distinguido Distin-
guished Name), cadena, periodo vlido,
tamao de clave, etc.
La parte principal del script (que no se
muestra en el listado) puede usar las fun-
ciones para generar un nmero de CA
(Autoridades de Certificacin) y un
nmero especificado de certificados de
clientes para cada CA. Tambin podemos
revocar algunos certificados de clientes
justo despus de generarlos. De esta
manera, la salida del script sera un mon-
tn de certificados de CA, certificados de
clientes revocados y CRL.
Conclusin
OpenSSL es una herramienta muy flexible.
Dado que podemos especificar todos los
parmetros necesarios usando conmuta-
dores en la lnea de rdenes, archivos,
tuberas y variables de entornos es perfec-
tamente adecuado para usarlo con script
de Bash.
Este artculo describe unos cuantos usos
de OpenSSL, pero hay que tener en cuenta
que esto es slo la punta del iceberg.
Animo a todo el mundo a dar un repaso al
manual y experimentar ideas propias. Lo
nico con lo que hay que tener cuidado es
con no confundir la clave privada de otra
persona con la nuestra.
OpenSSL y Bash PRCTICO
29
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
[1] OpenSSL http:// www. openssl. org/
[2] Bash http:// www. gnu. org/ software/
bash/
RECURSOS
E
l software libre se crea en un pro-
ceso muy dinmico que produce
muchas ms innovaciones que los
sistemas propietarios con sus capacidades
de desarrollo limitadas y objetivos de
diseo estrictamente definidos. Por tanto,
no es de extraar que existan ms de 200
variantes del sistema operativo Linux, que
sigan apareciendo nuevas versiones y que
muchas de estas distribuciones estn opti-
mizadas para escenarios de uso especiales.
Esta pltora de opciones significa que el
camino hasta encontrar el mejor derivado
de una aplicacin implicar probable-
mente una buena cantidad de pruebas. Y
estas pruebas suelen implicar la descarga
de varios gigabytes en imgenes ISO desde
Internet y grabarlos en DVDs o CDs para
poder probar los sistemas operativos en
sesiones live.
Sin embargo, podemos evitar todo este
trabajo de una manera muy elegante con
un pequeo programa llamado Multi -
Sysem, que soporta el uso simultneo de
mltiples distribuciones de Linux a travs
de un dispositivo de memoria USB o tar-
jeta SD. Todo lo que necesitamos es un
sistema Linux que funcione y las imge-
nes ISO que deseemos probar.
PRCTICO MultiSystem
30
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Comenzamos
MultiSystem est disponible para su des-
carga en la pgina web del proyecto [1].
Despus de descargar el script shell, que
pesa tan slo un par de cientos de kiloby-
tes, podemos descomprimir el archivo
tecleando:
tar-xjvf install-depotU
-multisystem.sh.tar.bz2
El script se debe instalar en un sistema
Ubuntu. La rutina de instalacin cuenta
con un buen nmero de dependencias,
que se resuelven automticamente en
Ubuntu mediante la descarga de los ele-
mentos necesarios desde los repositorios
disponibles. Despus de las descargas y
las modificaciones, la rutina aparecer en
el men Gnome debajo de Aplicaciones |
Accesorios como MultiSystem. Tambin
veremos una entrada MultiSystem test iso.
Podemos iniciar el programa pulsando en
el elemento del men y deberamos ver la
ventana principal del software tras un
breve momento (vase la Figura 1).
Debemos asegurarnos de que conecta-
mos el dispositivo de memoria USB en el
que vamos a instalar los sistemas operati-
vos en nuestro equipo antes de iniciar
MultiSystem. MultiSystem comprueba si
el medio de destino est disponible al ini-
ciarse y le asigna una etiqueta. La memo-
ria USB tambin debe tener espacio sufi-
ciente si vamos a instalar una distribucin
ms grande.
El programa tambin especifica algunos
requisitos de hardware bastante exigentes:
adems de suficiente espacio libre en
disco, tambin necesita al menos 1GB de
Mltiples variantes de Linux en un dispositivo de memoria USB
MULTI-TALENTO
Los usuarios de Linux pueden elegir entre ms de 200 imgenes ISO con distribuciones completas en la web.
Si te gusta experimentar, el pequeo programa MultiSystem permite guardarlos en una memoria USB.
POR ERIK BRWALDT
R
o
n
a
l
d

H
u
d
s
o
n
,

1
2
3
R
F
.
c
o
m
Figura 1: La pantalla de bienvenida que
aparece tras iniciar MultiSystem.
31
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
RAM si queremos utilizar todas las funcio-
nes del programa. MultiSystem nos da la
opcin de probar la memoria USB prepa-
rada en un entorno virtual en primer
lugar, lo que requerir suficiente memoria
RAM y rendimiento de la CPU.
El software puede instalar imgenes ISO
a partir de dos fuentes en la memoria USB.
Si ya hemos descargado algunos archivos
ISO desde la web y los almacenamos en
nuestro disco duro local, MultiSystem
puede usarlos. De lo contrario, el pro-
grama descargar automticamente el
archivo ISO requerido desde Internet
basndose en nuestra seleccin de una
lista (vase la Figura 2).
A continuacin, podemos utilizar el
administrador de archivos para arrastrar
los archivos ISO almacenados localmente
en el disco duro o en un soporte extrable
y colocarlos en la parte inferior de la ven-
tana del programa. MultiSystem abre a
continuacin otra ventana y muestra el
progreso de la instalacin del archivo ISO
actual en un terminal (vase la Figura 3).
Si se producen errores durante la insta-
lacin de los sistemas en la memoria USB,
se indican en la ventana de terminal y el
software intentar terminar de instalar los
archivos. Una vez que las distribuciones
individuales se almacenan en la memoria
USB, se instala y modifica el cargador de
arranque GRUB en el MBR del dispositivo.
Men de Arranque
Si hemos instalado distintas variantes de
Linux en la tarjeta de memoria o si desea-
mos utilizar comandos especiales de
arranque, podemos modificar fcilmente
el gestor de arranque con MultiSystem.
Una serie de botones dispuestos horizon-
talmente en cuatro filas en la parte dere-
cha de la ventana del programa nos ayu-
darn a hacerlo. Adems de mover y
borrar las entradas de arranque, tambin
podemos marcar reas de la memoria USB
como persistente para que cualquier dato
que se edite en las operaciones en live
pueda almacenarse permanentemente. Sin
embargo, esta funcin es dependiente de
la distribucin y MultiSystem no la ofrece
para cada variante de Linux (vase la
Figura 4).
Primera Prueba
Si hemos creado varias distribuciones de
Linux con MultiSystem en un dispositivo
de memoria y queremos probar su integri-
dad antes de empezar a usar el sistema, la
ventana principal del programa propor-
ciona dos botones situados a la izquierda
de las entradas del men GRUB en la pes-
taa MS. Al pulsar en uno de los botones
habilitamos bien el entorno QEMU o bien
VirtualBox con la variante de Linux selec-
cionada en el men de inicio, que tambin
tiene que estar en el dispositivo. QEMU y
VirtualBox se descargan desde Internet y
se vuelcan en el disco cuando se instala
MultiSystem, sin necesidad de
configuracin adicional. Podemos ver
inmediatamente si el dispositivo USB est
correctamente instalado.
Gestor de Arranque
MultiSystem instala y configura el gestor
de arranque de forma autnoma en su
mayor parte. Debido a que el software
tambin puede hacer que los sistemas
operativos estn disponibles en un dispo-
sitivo de memoria flash que no cumpla
con las especificaciones de Linux, se con-
figuran varias opciones de arranque sin
necesidad de intervencin por parte del
usuario. Para ejecutar un sistema opera-
tivo extico, tal como OS/ 2 Warp de IBM
o su sucesor eComStationn desde la
memoria USB o para ejecutar los dife-
rentes gestores de arranque y los diversos
archivos de inicio de las variantes de Win-
dows, MultiSystem tambin instala el ges-
tor de arranque Grub4Dos.
En funcin del sistema operativo que
instalemos, encontraremos los ajustes
necesarios en Grub4Dos. MultiSystem
tambin instala automticamente Free-
DOS, un entorno solo-DOS desde el que se
puede crear un CD de arranque de DOS.
Adems, podemos seleccionar varias
opciones para el gestor de arranque GRUB
eligindolas desde el men. Las opciones
incluyen los ajustes tpicos de seguridad
en caso de incompatibilidad de hardware
junto con el gestor de arranque Plop. Tam-
bin podemos crear disquetes Super Grub
[2] en caso de encontrar problemas al ini-
ciar el sistema. Esto nos permite recons-
truir rpida y fcilmente el gestor de
arranque si la configuracin est rota
(vase la Figura 5).
Problemas de Arranque
Si nuestra memoria USB no se detecta
como un dispositivo de arranque, a pesar
de las pruebas exitosas en los entornos
virtuales, la razn es probablemente la
configuracin de la BIOS. En algunos
ordenadores, habilitar el dispositivo USB
como la primera entrada en el orden de
inicio de la BIOS no es suficiente, tambin
es necesario habilitar el soporte USB de la
BIOS. Debemos comprobar el men de
configuracin de la BIOS en busca de la
opcin que haga esto.
Otro problema puede ocurrir al arrancar
desde USB, especialmente con ordenado-
MultiSystem PRCTICO
Figura 4: Una ventana principal fcil de
entender da acceso a las funciones ms
importantes.
Figura 2: El software descarga automtica-
mente la distribucin deseada.
Figura 3: La imagen ISO se almacena
automticamente en el dispositivo.
al gestor de arranque GRUB del
dispositivo USB creado por Mul-
tiSystem, que a su vez habilita el
sistema operativo apropiado.
Plop ofrece este soporte para los
populares estndares USB 1.x y
2.0. Durante las pruebas, no
tuvimos ningn problema con el
dispositivo USB MultiSystem
con viejo hardware que no ofre-
ca una opcin directa para
arrancar desde un dispositivo
USB. Debemos tener en cuenta
que los ordenadores antiguos
que slo soportan las especifica-
ciones ms antiguas de USB (1.0
y 1.1) tendrn un arranque muy
lento al iniciarse desde USB. En el labora-
torio, Puppy Linux, que estaba en funcio-
namiento en muy poco tiempo en una
mquina rpida, tard ms de un minuto
en mostrar el escritorio con una vieja
mquina.
Actualizaciones,
Personalizacin y dems
MultiSystem ofrece varias caractersticas
adicionales que garantizan un estndar de
datos de alta seguridad. En la pestaa
Mens de la ventana del programa, encon-
traremos las opciones de actualizacin
para el gestor de arranque GRUB, as
como parmetros para crear y administrar
archivos persistentes de los usuarios, para
la localizacin y para instalar VirtualBox
de forma retroactiva (vase la Figura 7).
Una opcin muy interesante es la posi-
bilidad de crear una copia de seguridad
completa de la memoria USB o la recons-
truccin de la tarjeta de memoria desde
una imagen. La pestaa Mens tiene una
entrada de Backup/ Restore que nos lleva a
un cuadro de dilogo en el que podemos
almacenar una imagen en un directorio de
nuestra eleccin. A continuacin, pode-
mos restaurar la imagen con el mismo ele-
mento del men si necesitamos reanimar
una memoria USB. En otras palabras, si el
dispositivo de memoria falla, no hay nece-
sidad de reconstruir minuciosamente
nuestro anterior entorno mediante la ins-
talacin de todos los sistemas operativos
(vase la Figura 8).
Conclusiones
MultiSystem puede ser una gran ayuda
para los usuarios a los que les guste expe-
rimentar, as como a los administradores
que deseen disponer de un sistema fiable
de rescate con una memoria USB en el
bolsillo. El software nos permite poner
todo tipo de distribuciones Linux en un
dispositivo de memoria flash y tambin
ofrece software adicional para hacer que
cooperen aquellos equipos que en princi-
pio no admiten el arranque desde USB.
Esta funcionalidad elimina la necesidad de
quemar y llevar medios pticos, y as
podremos probar todos los nuevos deriva-
dos de Linux en netbooks o notebooks,
que no suelen tener una unidad de DVD
interna.
res muy antiguos. En muchos casos, no se
puede arrancar desde una memoria USB,
unidad ptica o discos duros externos
conectados al sistema a travs del bus
USB. En este caso, MultiSystem ofrece
crear un CD de inicio, que se lee al arran-
car el ordenador en cuestin y luego habi-
lita el dispositivo USB conectado. Para ello,
pulsamos en Crear CD para lanzar USB en
la pestaa Iniciar de la ventana del pro-
grama MultiSystem. Entonces, el programa
nos pedir que descargue el gestor de
arranque Plop [3] y abrir Firefox con la
pgina web correcta. Tras descargar el
archivo zip con el gestor de arranque Plop,
MultiSystem genera automticamente una
imagen ISO con el gestor de arranque den-
tro. A continuacin, debemos grabarla en
un CD (vase la Figura 6).
A diferencia de GRUB o LILO, el gestor
de arranque Plop nos permite arrancar
desde un dispositivo USB sin que el sis-
tema tenga compatibilidad en la BIOS para
el arranque desde USB. Para ello, apunta
PRCTICO MultiSystem
32
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 5: MultiSystem configura GRUB con muchas
opciones.
Figura 6: MultiSystem permite crear un CD
de arranque que habilita arrancar desde el
dispositivo USB.
Figura 7: Tenemos un fcil acceso a las con-
figuraciones en MultiSystem.
Figura 8: MultiSystem tambin ofrece una
sencilla funcionalidad de copia de seguridad
y restauracin.
[1] Pgina de MultiSystem:
http:// liveusb. info/ dotclear/ (pulsar
en el botn de traducir).
[2] Super GRUB Disk:
http:// www. supergrubdisk. org/
[3] Gestor de arranque Plop:
http:// www. plop. at/ de/ bootmanager/
index. html
RECURSOS
Migracin de Apps DESARROLLO
Mientras que Android 3 estaba reser-
vado para las tablets, los smartphones
por su parte tenan que ser gestionados
con Android 2. Slo con Android 4 [1]
se reunificaron ambas ramas. Telfonos
y tablets soportan Ice Cream Sandwich
por igual. Adems, gracias a un pack
de compatibilidad esttico [2], los dis-
positivos pequeos y antiguos tambin
A
ndroid 3 debera haber empe-
zado a cambiar esa tendencia,
ya que con su publicacin, el
SDK de Android ya debera estar prepa-
rado para las tablets. Qu es lo que ha
cambiado? Las nuevas clases y mto-
dos, junto con los nuevas formas de dis-
posicin de los distintos elementos, ten-
dran que mejorar notablemente la pre-
sentacin de la informacin
en las pantallas ms grandes.
Las apps de Android 3 han
tomado una aproximacin
centrada en unas clases espe-
ciales que Google llama acti-
vities: detrs de cada anuncio
en pantalla hay una activity.
Para mostrar una lista de
opciones (Figura 1), una
pgina de detalles de los ele-
mentos (Figura 2) y la de edi-
cin (Figura 3), una aplica-
cin tpica necesitara una
ListActivity y dos Activities
adicionales ms. Cada una de
dichas activities adems
incluye toda la lgica de su
pgina.
pueden disfrutar de las nuevas caracte-
rsticas.
Todo es una actividad
El principio basado en las activities era
perfecto para el tamao ms o menos
pequeo de las pantallas de los smart-
phones. Cada actividad era sinnimo
de una pantalla, con su correspon-
Las nuevas aplicaciones capaces de aprovechar las funciones exclusi-
vas para tablets van apareciendo con cuentagotas en Google Play. En
esta serie de artculos vamos a intentar explicar los motivos e intentare-
mos incentivar la portabilidad de Gingerbread a Ice Cream Sandwich.
POR HARALD WILHELM
De Android 2 a Android 4 en siete pasos Parte 1
DE 2 A 4
D
e
n
i
s

F
o
n
c
h
i
k
o
v
,

1
2
3
R
F
33
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 1: Una lista de seleccin
de datos en Android 2.x.
Figura 3: Edicin de un elemento
en Gingerbread.
Figura 2: La pgina de detalles
de un elemento en Android 2.
DESARROLLO Migracin de Apps
34
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
del que una notifi-
cacin tpica nece-
sita para mos-
trarse en pantalla.
Por lo que es
necesario enfocar
el tema de otro
modo. Uno de los
ejemplos tpicos
que pone Google
al hablar de los
dispositivos con
pantallas ms
grandes es el de
una app de correo. Se tratara de mos-
trar la lista de los mensajes junto con
los detalles del correo seleccionado en
ese momento exactamente igual que
hacen las aplicaciones de correo para
ordenador ms conocidas. ste era el
objetivo para Android 4.0.
Son los fragmentos la
solucin?
Quien piense que existe algn procedi-
miento para adaptar las aplicaciones
existentes y, con unos sencillos cam-
bios, dejarlas ya listas para ejecutarse
en la tablet, se equivoca por completo.
Con Ice Cream Sandwich, Google ha
seguido a rajatabla el manual, ha reto-
cado un gran nmero de clases y, con
los fragmentos, ha incluido contenedo-
res reutilizables. Visualmente los frag-
mentos parecen como los grupos de
vistas que ya conocemos pero inter-
namente se asemejan ms a las activi-
ties. Los fragmentos deben ser reutili-
zables y combinables. Pueden ir inte-
grados dentro de activities, que podrn
gestionarlos completamente.
Siguiendo nuestro sencillo ejemplo,
vamos a tomar nuestra ListActivity y
nuestra Detail-Activity y las transfor-
diente orden de elementos (layout) y
los men asociados. Un comporta-
miento muy claro, que resulta sencillo
de implementar para el programador y
que est perfectamente soportado en el
SDK de Android.
Ahora Android 2 ya poda trabajar
con distintos tamaos de pantalla. De
ello se encargaban los recursos ubica-
dos en las correspondientes carpetas
(por ejemplo res/layout y res/layout-
large-land). De este modo se poda pre-
sentar una actividad en tres dispositi-
vos de distinto tamao de tres formas
diferentes. Y todo ello sin que el desa -
rrollador tuviera que cambiar una sola
lnea de cdigo. Slo hay que crear un
fichero XML para definir la disposicin
o layout y ubicarlo en la carpeta
correspondiente. Del resto se encarga
el sistema Android.
Esta aproximacin es igualmente
vlida para Android 3 y Android 4. Pero
ahora hay ms carpetas para los layouts,
para tener en cuenta las pantallas ms
grandes (por ejemplo res/layout-
xlarge-land ). Algo que muchos progra-
madores estaban esperando.
Pero una pantalla de 10,1 pulgadas
tiene mucho ms espacio disponible
maremos en una nica actividad con
dos fragmentos. Adems tendremos
que controlar cmo conmutar de la pre-
sentacin combinada de los fragmentos
a la presentacin basada en actividades
en ltima instancia, esto requiere a
su vez otra activity, puesto que en los
telfonos (incluso con el pack de com-
patibilidad) sigue siendo necesaria una
programacin centrada en activities
(Figura 4). En este punto, an no
hemos tenido en cuenta la pgina para
editar un elemento, por lo que habr
que incluir una nueva actividad.
De un vistazo
El nuevo diseo es ms limpio y la
modificacin de las clases ha sido un
acierto. Los programadores de Google
deben estar dando palmas con las ore-
jas por el buen trabajo realizado. El
problema es que no han pensado en los
desarrolladores de las 500.000 aplica-
ciones ya existentes. Es verdad que ICS
escala las apps antiguas a voluntad del
usuario para que se vean en la pantalla
grande, pero Android 4 no ofrece
muchas ms posibilidades. La optimi-
zacin es algo completamente distinto.
Con unas ligeras modificaciones con-
seguiremos que una app antigua
parezca visualmente nueva. Las pala-
bras clave son: targetSdkVersion=11,
hardwareAccelerated= true en el
fichero manifest.xml y showAsAc-
tion=... en las declaraciones del
men de opciones. Pero para hacer lo
mismo con la presentacin de la lista y
los detalles se necesita una conversin
no trivial de la app existente. Si has
creado una app gratuita en Google
Play, te preguntars si merece la pena
el esfuerzo. Otra cosa es que ests
dedicado plenamente a la programa-
Figura 4: Actividades y fragmentos en telfonos y tablets.
Figura 5: Los fragmentos Listas y Detalles juntos en una actividad. Figura 6: La pgina de edicin siempre queda por encima.
cin de apps Android 4.0, en cuyo caso portar la app te
supondr una excelente forma de poner en prctica tus
conocimientos.
A partir de este punto comenzamos con nuestro taller y
nos concentramos en las apps Android ms modernas.
Por ello no nos vamos a limitar a las habituales y mni-
mas modificaciones del tipo targetSdkVersion=11, sino
que vamos a exponer en detalle el proceso de migracin
desde Android 2.x hasta Android 4.x. Para ello utilizare-
mos dos apps de ejemplo.
Apps separadas para tablets
En el taller no nos ocuparemos de la app combinada
Internet est lleno de ejemplos al respecto, sino que vere-
mos cmo desarrollar una app para telfonos y tablets.
Como los requerimientos aumentan da a da, cada vez
se hace ms difcil crear una nica app para telfono y
tablet. En base a esto, Google ofrece la posibilidad de
suministrar varios ficheros APK para una misma aplica-
cin. Las aplicaciones combinadas no suponen ningn
problema en el caso de las apps visualmente sencillas,
pero cuando las apps son ya ms complicadas es preferi-
ble que optes por utilizar varios paquetes.
En el taller transformaremos una app completa para
telfono en una aplicacin para tablet. De tal modo que
veremos las nuevas caractersticas como fragmentos,
ActionBar, CursorLoader, Preference-Header, etc. Desp-
dete de muchas de las funciones presentes en Android 2.
La probabilidad de que dichas funciones acaben como
deprecated en Jelly Bean es muy alta.
Paso 1: Lo que es vs lo que debera ser
Lo primero es hacer un inventario. Cmo est estructu-
rada la vieja app y cmo se tiene que ver la nueva? Nues-
tra aplicacin original contiene una tabla de datos con un
ciclo completo (listar, mostrar, borrar, nuevo, editar). La
app se inicia con ActivityList. sta muestra una lista con
todas las entradas de una tabla en la base de datos. Al
mantener pulsado el dedo sobre una de esas entradas,
aparece un men contextual con opciones. Y si se hace
clic sobre una de las entradas, se accede a la pgina de
detalles.
Desde el men de opciones el usuario puede acceder
entre otras a la pgina de edicin. As ambos tipos de
men (contextual y de opciones) estn representados. La
lista se carga gracias a una tarea asncrona que se ejecuta
en segundo plano. Durante la carga aparece una barra de
progreso capaz de detectar la orientacin (horizontal/
vertical) del dispositivo y un cuadro de alerta que solicita
confirmacin antes de borrar los datos. Para completar el
lote, tenemos otra pgina ms con la configuracin de la
aplicacin.
La nueva app adaptada a ICS debera mostrar una vista
con la lista y la pgina de detalles (Figura 5) ambos
sern fragmentos y una actividad central se encargar de
gestionarlos. La pgina de edicin (Figura 6) seguir
siendo una actividad. La tarea asncrona la sustituiremos
por un nuevo CursorLoader. Los mens de opciones los
cambiaremos por una ActionBar. Al contrario de lo que
de clases y mtodos deprecados y
los sustituiremos por otros nue-
vos.
Paso 2: El manifiesto
Como ya hemos dicho antes, en el
manifiesto de la aplicacin, den-
tro de la propiedad Application
incluimos el atributo hardware
Accelerated=true. Con esta ins-
truccin le decimos a la app que
utilice el Render OpenGL, disponi-
ble desde Android 3. Dentro de la
etiqueta uses-sdk aumentaremos
de 10 (Android 2.3.3) a 14
(Android 4.0) el valor de los atri-
butos minSdkVersion y target
SdkVersion. Con estos sencillos
cambios ya tendremos disponible
la nueva ActionBar, y el nuevo y
atractivo tema de Android 4 por
fin ser visible.
Estos pasos influyen en la pre-
sentacin de la app en un disposi-
tivo con Android 4.0. Y si el desarrolla-
dor aade el atributo showAsAction en
la entrada del men de opciones,
entonces el resultado ya es total. El
mismo Android 4 se encarga de escalar
adecuadamente estas apps adaptadas y
el resultado final es que visualmente
parecer que estamos ante una app
para tablet nativa, aunque por
supuesto no es as. En este punto es
donde la mayora de los programadores
dan por finalizado el proceso de migra-
cin.
Pero a nosotros no nos basta con
esto, por lo que vamos a la etiqueta
supports-screens e introducimos el
nuevo atributo android:xlarge
Screens=true, adems de cambiar el
valor de los dems parmetros Screen
a false. As la app slo se ejecutar en
los dispositivos que cuenten con una
pantalla suficientemente grande para
ello.
Paso 3: Layout
La nueva app debe ejecutarse exclusi-
vamente en el modo tablet. En panta-
lla, lo que se muestra casi siempre es la
presentacin de la lista y los detalles
del elemento de la lista seleccionado.
Slo cuando se modifique una de las
entradas o se aadan otras nuevas, o
bien cuando accedamos a la pgina de
configuracin ser cuando una activity
se encargue de ocultar esta pantalla.
Estas dos pginas tambin son una
combinacin de activities con fragmen-
tos. En teora aqu no era necesario,
pero hemos optado por hacer todo
segn las nuevas reglas.
sucede en los ejemplos de Google, en
los que todas las clases se incluyen en
un fichero (tanto para fragmentos
como para actividades), en este taller
los separaremos. La comunicacin
entre los objetos se efecta con la
ayuda de Listeners. Evitaremos tam-
bin, en la medida de lo posible, el uso
DESARROLLO Migracin de Apps
36
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
DESARROL
Figura 7: El clsico ciclo de vida de una app Android
en Froyo y Gingerbread.
Listado 2: Listener y enlace de actividades
private MyListItemClickListener
listItemClickListener;
public interface MyListItemClickListener {
public void myListItemClick(long id);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
listItemClickListener =
(MyListItemClickListener) activity;
} catch (ClassCastException classCastException) {
throw new ClassCastException(activity.toString() +
must implement MyListItemClickListener);
}
}
Listado 1: El layout de tablet
<LinearLayout
xmlns:android=http://schemas.android.com/apk/res/
android
android:layout_width=match_parent
android:layout_height=match_parent
android:orientation=horizontal >
<fragment
class=de.asltd.androiduser.a4.FragmentList
android:id=@+id/fragmentlist
android:layout_height=match_parent
android:layout_weight=1
android:layout_width=0dip
android:name=
de.asltd.androiduser.a4.FragmentList />
<FrameLayout
android:id=@+id/right
android:layout_height=match_parent
android:layout_weight=2
android:layout_width=0dip />
</LinearLayout>
El listado 1 muestra la disposicin, o
layout, de la pantalla principal con los
dos fragmentos. La activity del inicio,
ActivityList, se encarga de cargar estos
ficheros XML de recursos. Al llegar a la
etiqueta fragment (ojo con minscu-
las!) cargar las clases usadas. Detrs
de la aplicacin de ejemplo se oculta
un fragmento lista. El segundo ele-
mento del layout es un contenedor
que, ms adelante, cuando el programa
est en ejecucin ser sustituido por
otros fragmentos. El reparto del espa-
cio disponible en la pantalla lo deter-
mina el atributo android:layout_
weight. La lista toma un tercio del
espacio disponible y el contenedor los
dos tercios restantes.
En los layouts de los fragmentos indi-
viduales asumimos una relacin 1:1
con respecto a la aplicacin de telfono
original.
Paso 4: Fragmentos
Para Google un fragmento es una pieza
de software reutilizable con su propio
layout. Si bien en las versiones anterio-
res de Android, las actividades con sus
layouts eran la medida universal de
todas las cosas, esto ha cambiado y
ahora tenemos a nuestra disposicin
los fragmentos, que tambin podemos
combinar entre s. De hecho en la pan-
talla principal tenemos por un lado la
lista y por otro los detalles, fragmentos
en ambos casos. Por encima de ellos
est una activity individual (Activity-
List).
Queda a criterio del programador
decidir si gestionar varios, o incluso
todos, fragmentos con una actividad, o
bien optar por una aproximacin ms
modular en la que se empleen distintas
actividades para gestionar los fragmen-
tos correspondientes. Al final no slo
depende de los requerimientos de la
app. El grado de complejidad de la acti-
vity aumenta con el nmero de frag-
mentos que debe gestionar. Y en la
prctica se ha demostrado que suele
ser preferible gestionar cada fragmento
(lista, detalles, etc.) con su activity
correspondiente. Si hay ms fragmen-
tos de estos, tambin habr ms activi-
ties asociadas.
Los fragmentos tienen un ciclo de
vida similar al de las activities. Como
habitualmente los fragmentos van
embebidos en activities, el correspon-
diente ciclo de vida (Figura 7) se ve
ampliado con nuevos estados (Figura
8). El mtodo onAttach de un frag-
mento se activa, por ejemplo, la pri-
mera vez que una activity se conecta a
un fragmento. En la aplicacin de
ejemplo se utiliza para comprobar la
conexin con las respectivas activities.
Aqu es importante que las activities
Migracin de Apps DESARROLLO
37
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 8: El ciclo de vida de los fragmentos
est ampliado en comparacin con el de las
activities.
Listado 3: Fragmentos que cargan sus layouts
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup,
Bundle bundle) {
return inflater.inflate(R.layout.fragmentdetails, null);
}
mento lista. La ActivityList conectada
recibir la notificacin de este evento y
lanza el segundo fragmento, el de deta-
lles, con los datos correspondientes a la
entrada seleccionada. Aqu queda com-
probado que los fragmentos son slo
interfaces de usuario con una pequea
lgica incorporada. La gestin com-
pleta, por el contrario, se deja en
manos de las partes de la aplicacin en
la que se integran los fragmentos. Un
ejemplo de comunicacin entre frag-
mentos y actividades lo tenemos en el
listado 4.
En el cdigo se sustituye el contene-
dor inicial, el FrameLayout por el frag-
mento con los detalles. Si en lugar del
contenedor de inicio lo que tenemos es
un FragmentDetails con los datos de
otra entrada diferente, ser ste el sus-
tituido. En teora con setCurrentId()
podramos sobreescribir los detalles de
la entrada antigua con los de la nueva.
Pero en el ejemplo tenemos que mos-
trar el intercambio de fragmentos, por
lo que hemos tenido que tomar un
camino algo ms largo.
FragmentManager y FragmentTran-
saction son clases nuevas, incluidas
tambin en el pack de compatibilidad.
Nos ocuparemos de las gestiones com-
plicadas de fragmentos agrupndolas
en transacciones. De modo que la
orden commit har que Android las
ejecute secuencialmente. En el ejemplo
esto es lo que sucede cuando se susti-
implementen el listener requerido. Con
la ayuda de este listener, se puede
transferir parte de la lgica del pro-
grama a las activities. Los fragmentos
harn su trabajo concreto y dejarn el
resto a las activities, como se muestra
en el listado 2.
Juntos o separados?
Google lo pinta todo muy fcil: en casi
todos los ejemplos para Android las
activities y los fragmentos se empaque-
tan en un fichero fuente. La comunica-
cin con las clases internas privadas es
muy cmoda. Se salva el getter/setter,
se cambia al package o variable corres-
pondiente y ya hemos mejorado el ren-
dimiento o la memoria. Pero la vida
real es muy diferente. Aqu es preciso
saber utilizar correctamente los objetos
reutilizables.
La llamada a onCreate(), tan impor-
tante en las activities, apenas se utiliza
en los fragmentos. En estos la sustituye
la nueva llamada onCreateView(). En
esta llamada el fragmento usa su layout
a partir de un fichero de recursos exis-
tente y no se genera mediante cdigo.
Viendo el nombre del mtodo y su
valor de retorno, podemos reconocer
que los fragmentos no son ms que un
tipo de grupos de vistas embebidos en
otros grupos de vistas. Esto queda
patente en el listado 3.
Cuando el usuario hace clic en una
entrada, se dispara un Listener del frag-
tuye el contenedor vaco o un Frag-
mentDetails antiguo por otro Fragment-
Details nuevo.
Tambin es posible cargar con ante-
lacin cascadas de fragmentos y mos-
trarlos u ocultarlos con las instruccio-
nes show() y hide() respectivamente.
En este aspecto no hay ms lmite que
el de la memoria disponible.
Conclusin
Quien quiera adaptar mnimamente su
aplicacin a Android 4, slo tiente que
hacer las tres modificaciones en el
manifiesto que ya hemos visto. Pero
para optimizar verdaderamente la app
para Android 4, hacen falta algunos
cambios ms. En la segunda parte de
este taller veremos lo que cambia en la
comunicacin con la base de datos y
cmo se ven la nueva ActionBar y el sis-
tema de preferencias en Android 4.
DESARROLLO Migracin de Apps
38
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
[1] Nuevas funcionalidades para el
desarrollador en Android 4.0:
http:// developer. android. com/ intl/ de/
sdk/ android-4. 0-highlights.
html#DeveloperApis
[2] Paquete de compatibilidad ICS:
http:// developer. android. com/ sdk/
compatibility-library. html
[3] Desempeo:
http:// developer. android. com/ guide/
practices/ design/ performance. html
RECURSOS
Listado 4: Comunicacin entre fragmentos y actividades
// In FragmentList
@Override
public void onListItemClick(ListView listView, View
view, int position, long id) {
super.onListItemClick(listView, view, position,
id);
listView.setItemChecked(position, true);
listItemClickListener.myListItemClick(id);
}
// In ActivityList
public class ActivityList extends Activity
implements FragmentList.MyListItemClickListener {
@Override
public void myListItemClick(long id) {
processDetails(id);
}
private void processDetails(long id) {
Fragment fragment =
getFragmentManager().findFragmentById(R.id.right);
if (fragment == null ||
(fragment instanceof FragmentDetails &&
((FragmentDetails) fragment).getCurrentId() != id)) {
fragment = new FragmentDetails(id);
FragmentTransaction transaction =
getFragmentManager().
beginTransaction();
transaction.replace(R.id.right,
fragment);
transaction.setTransition(FragmentTransaction.
TRANSIT_FRAGMENT_FADE);
transaction.commit();
}
}
}
Dart DESARROLLO
inventores lanzaron deliberadamente
sus especificaciones en sus comienzos
para recolectar todas las posibles suge-
rencias para mejorar en lo posible e
incrementar su aceptacin. Es la razn
principal por la que la especificacin del
lenguaje sea de licencia Creative Com-
mons Attribution 3.0 y el cdigo del pro-
grama est publicado por el proyecto
bajo la licencia Google BSD [3]. Al escri-
bir este artculo, la ltima versin de
Dart era la 0.08, siendo por lo tanto la
que se utilizar
para su
anli-
sis.
main() y
Clases
El comienzo para un pro-
grama Dart es como en Java,
main(). Para programadores en
Javascript esto puede ser
algo nuevo:
main() {
// Un simple comentario
print(HolaMundo!);
}
Los programadores de
Javascript tosern otra
vez: Dart es un len-
guaje orientado a obje-
tos. El Listado 1 mues-
E
l cdigo escrito en el lenguaje de
programacin Dart de Google se
parece mucho a una mezcla de
Javascript y Java con algo de Scala. Este
parecido es intencionado: el lenguaje de
programacin [1] fue diseado con el
objetivo de eliminar algunos de los tpi-
cos problemas y lastres de compatibili-
dad en Javascript. La idea era que los
programas en Dart pudieran ejecutarse
ms rpido, proporcionando una mejor
seguridad, trabajando en cualquier dis-
positivo con internet y que adems, fue-
ran adecuados para proyectos ms gran-
des [2]. Si has tenido experiencias con
los lenguajes anteriores y esta descrip-
cin encaja con casi cualquier progra-
mador web te sentirs rpida-
mente como en casa utilizando
Dart.
Los programas escritos en Dart
podrn ejecutarse en una
mquina virtual especial en el
navegador. El proyecto Dart pro-
porciona una referencia para su
implementacin en su sitio web. La
implementacin es capaz de ejecutar
programas en Dart en la lnea de coman-
dos o en un servidor de internet. Por lo
tanto, Dart es principalmente un susti-
tuto adecuado para PHP. Adems de la
mquina virtual, el proyecto ofrece
varias libreras cuyas funciones entre
otras cosas soportan conveniente-
mente la manipulacin de rbol DOM de
un sitio web. Adems, hay ms herra-
mientas que facilitan la vida de los pro-
gramadores, como el editor Dart basado
en Eclipse (Figura 1).
Trabajo en curso
Todo esto suena bastante tentador, con
un pequeo contratiempo: Dart est
actualmente en una etapa de desarrollo
muy temprana, por lo que no es ade-
cuado utilizarlo para produccin. Los
tra una declaracin de una clase lla-
mada Coche. La clase comienza por
definir una nueva variable color. Como
sugiere la palabra clave var, las varia-
bles pueden tomar valores arbitrarios
en cualquier momento como Javas-
cript, Dart es un lenguaje sin tipifica-
cin. Contina con el constructor
Coche(), que debe utilizar el mismo
nombre de la clase. this selecciona el
objeto actual, como en Java. En otras
palabras, this.color asegura que el valor
no termina en una variable global o en
una nueva.
La lnea 8 muestra dos caractersticas
de Dart. En lenguajes tipificados como
Java, el desarrollador puede definir
mltiples constructores con diferentes
parmetros (sobrecarga). Cuando se
crea un objeto, el lenguaje llama auto-
mticamente al constructor adecuado.
En lenguajes sin tipificacin como Dart,
esta eleccin no es tan sencilla. Para
resolver este problema, el lenguaje uti-
liza constructores conocidos. En el Lis-
tado 1, el segundo constructor se llama
pintura y si queremos llamar a este
El lenguaje de programacin Dart es la alternativa moderna de Google para Javascript. Se ejecutar principal-
mente en navegadores web, adems de por lnea de comandos y en otros tipos de servidores como reem-
plazo para PHP. POR TIM SCHRMANN
Dart, la alternativa de Google para Javascript
En la diana?
L
a
d
y
a
n
n
,

1
2
3
r
f
39
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
DESARROLLO Dart
40
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
tiles, pero este acercamiento tiende a
causar alguna laxitud para la parte de
los programadores en el mundo real,
llevando a errores que podran ser
difciles de arreglar. Por esta razn,
los programadores pueden opcional-
mente especificar un tipo para una
variable:
class Coche {
String color;
[...]
Si el programa Dart intenta almacenar
un nmero en color en algn momento
posterior en el programa, la mquina
virtual crear una advertencia. Como
hemos dicho, esto es simplemente una
advertencia, no un error el programa
continuar su ejecucin con un nmero
en color. Este comportamiento llama la
atencin del programador para la asig-
constructor cuando hagamos una ins-
tancia de Coche en la funcin main(),
necesitamos especificar el nombre ah:
Coche ferrari = U
new Coche.pintura(Roja);
En contraste, new Coche() simplemente
llamar al constructor normal.
Como segunda caracterstica especial,
el constructor, Coche.pintura() utiliza
una abreviacin, Dart asigna el valor
pasado directamente a la variable color.
Por supuesto, si lo preferimos, podemos
utilizar la versin larga:
Coche.pintura(var uncolor) {
this.color = uncolor;
}
Las variables que pueden asumir arbi-
trariamente valores pueden ser muy
nacin de errores y hace el cdigo ms
legible, evitando as que los usuarios no
tengan que temer desastres repentinos
del programa. Adems del tipo String,
Dart soporta los tipos listados en la
Tabla 1.
Dicho sea de paso, todos son objetos
internamente. Podemos incluso crear lis-
tas y mapas con new:
var coches = new List();
Las variables a las que no se han asig-
nado un dato tienen automticamente el
valor null.
Como en PHP, Dart puede insertar el
contenido de variables en cadenas. El
cdigo:
String nombre = Juan Aguilar;
print (Hola ${nombre});
mostrara la salida Hola Juan Aguilar.
Dentro de los corchetes {} podemos
tener incluso expresiones completas o
llamadas a funciones.
Versin Lnea
Los usuarios de Dart pueden abreviar la
definicin de una funcin individual de
esta forma:
int cuadrado(int numero) U
{ return numero*numero; }
con=>
Tabla 1: Tipos en Dart
Listado 1: Una simple Clase
01 class Coche {
02 var color;
03
04 Coche() {
05 this.color = azul;
06 }
07
08
Coche.pintura(this.color);
09 }
10
11 main() {
12 Coche ferrari = new
Coche.pintura(rojo);
13 Coche bmw = new Coche();
14 print(ferrari.color); //
muestra rojo
15 print(bmw.color); // mues-
tra azul
16 }
Figura 1: Dart Editor es un entorno de desarrollo basado en Eclipse, proporcionando un acceso
directo a ejemplos de cdigo.
Tipo Contenido Ejemplo
String Cadena (32-Bit Unicode) String nombre = Juan;
int Entero int numero = 12;
double nmeros de punto flotante de 64-bits
(en lnea con el estndar IEEE 754)
double numero = 1.3456;
num Enteros, nmeros de punto flotante o
ambos
num y = mx + b
bool true(verdadero) o false(falso) bool obtenercookies = true;
List Lista de valores, tambin conocido
como array
List nombres = [Juan, Pablo,
Jose];
Map Array asociativo, tambin conocido
como mapa hash o diccionario
Map traduccion = {casa : house,
coche : car, silla : chair};
int cuadrado(int numero) U
=> numero*numero;
(p.ej.,=> e equivale a { return e; }). En
Dart, podemos pasar una funcin a otra,
algo muy til en iteraciones de tipo for:
decirHola(String nombre) => U
print(Hola ${nombre});
List nombres = U
[Juan, Pablo, Jose];
nombres.forEach(decirHola);
La funcin decirHola escribe la cadena
que se le pasa despus de Hola y mues-
tra los resultados en la pantalla. La
segunda lnea crea una lista con tres
nombres que son pasados uno tras otro
en la funcin en el forEach en este
caso, la funcin es decirHola(). En otras
palabras, con este cdigo de tres lneas
se muestra Hola Juan, Hola Pablo y Hola
Jose.
Debido a que decirHola slo ocurre en
nombres.forEach(), podemos declarar
directamente la funcin ah y mostrar
sus nombres de la misma manera:
List nombres = U
[Juan, Pablo, Jose];
nombres.forEach( U
(String nombre) => U
print(Hola ${nombre}) );
Esta forma de codificar funciona correc-
tamente aqu, pero en funciones ms
complejas, podemos fcilmente perder
la pista de lo que estamos haciendo.
Los sospechosos habituales estn dis-
ponibles para el control de los bucles:
Dart DESARROLLO
41
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
for, if, switch y while, actuando de
forma similar a sus semejantes en Java o
Javascript. Adicionalmente, podemos
utilizar excepciones para identificar
errores.
Clsico
Dart hereda las interfaces de Java.
Cuando una clase implementa una inter-
faz, se garantiza que la funcin especifi-
cada de la interfaz se proporcione. El
Listado 2 muestra un ejemplo de heren-
cia.
Una clase puede implementar mlti-
ples interfaces pero slo hereda de una
clase exacta (p.ej., utilizar extends para
extender la clase). En el Listado 2, todas
las variables y funciones son pblicas,
con una excepcin, _alto. Si el nombre
de la variable o una funcin comienza
con un guin bajo, es privado y slo
podemos acceder a la variable o funcin
Listado 3: Patrn Factora
01 class Coche {
02 String hechopor;
03 static Map garaje;
04
05 factory Coche(String fab-
ricante) {
06 if(Coche.garaje ==
null) Coche.garaje=new Map();
07
08 if (Coche.garaje.con-
tainsKey(fabricante)!=null)
return Coche.garaje[her-
steller];
09 else {
10 Coche nuevocoche =
new Coche.comprar(fabricante);
11 Coche.garaje[fab-
ricante] = nuevocoche;
12 return nuevocoche;
13 }
14 }
15
16
Coche.comprar(this.hechopor);
17 }
18
19 main() {
20 var uncoche = new
Coche(Ferrari);
21 var otrocoche = new
Coche(Ferrari);
22 }
01 interface Superficie {
02 int contenido_superficie();
03 }
04
05 class Cuadrado implements Super-
ficie {
06 int ancho;
07 Cuadrado(int this.ancho);
08 int contenido_superficie()
=> ancho*ancho;
09 }
10
11 class Rectangulo extends
Cuadrado {
12 int _altura;
13 Rectangulo(int
this._altura, int br) :
super(br);
14 int contenido_superficie()
=> ancho * _altura;
15 }
16
17 main() {
18 Cuadrado q = new
Cuadrado(3);
19 Rectangulo r = new Rectan-
gulo(2,3);
20 print(q.contenido_superfi-
cie());
21 print(r.contenido_superfi-
cie ());
22 }
Listado 2: interfaces y extend
01 interface Coche default
CocheFactoria {
02 Coche(fabricante);
03 final fabricante;
04 }
05
06 class CocheFactoria {
07 factory Auto(fabricante) {
08 if (fabricante == Fer-
rari) {
09 return new
Cochecarreras(fabricante);
10 }
11 return new Salon(fabri-
cante);
12 }
13 }
14
15 class Cochecarreras implements
Coche {
16 Cochecarreras(this.fabri-
cante);
17 String fabricante;
18 }
19
20 class Salon implements Coche {
21 Salon(this.fabricante);
22 String fabricante;
23 }
24
25 main() {
26 print(new Coche(Ferrari) is
Cochecarreras);
27 print(new Coche(VW) is
Cochecarreras);
28 }
Listado 4: Combinando interface y factory
instancia en main(), parece que esta-
mos creando Coche directamente.
Adicionalmente, la palabra clave is
prueba si el objeto es de un tipo espec-
fico. Dicho sea de paso, la palabra final
enfrente de fabricante asegura que la
variable slo pueda ser asignada una
vez durante la iniciacin.
Contenedor de Servicios
Dart contiene tipos genricos, tambin
conocidos como generics, que nos sern
familiares del lenguaje Java. Programa-
dores de C++ tambin conocern este
concepto como templates. Podemos uti-
lizarlos para crear rpidamente contene-
dores para objetos arbitrarios. Las listas
y mapas son genricos. Por ejemplo,
List<Coche> crea una lista de objetos
de Coche:
main() {
List<Coche> listacoches U
= new List<Coche>();
listacoches.add(new U
Coche(Ferrari));
Coche uncoche =
listacoches[0];
}
Debido a que las variables pueden asu-
mir contenidos arbitrarios, Dart no
desactivar esto:
List<Coche> listacoches = U
new List<Coche>();
List<LKW> listacamiones = U
listacoches;
Esto quiere decir que
el experimento
puede fallar despus,
si el desarrollador
intenta hacer algo
con lo que se ha asu-
mido que sea una
lista de camiones
desde listacamiones.
Paralelismo
Los programadores
normalmente despla-
zan tareas que nece-
sitan ejecutarse en
paralelo en hilos
separados y despus
afrontan un trabajo
duro intentado mez-
clar los resultados
intermedios. Dart elimina los dolores de
cabeza de este proceso. Un objeto deri-
vado de la clase bsica Isolate (aislado)
podr, si queremos, ejecutarse separada-
mente del programa principal en su pro-
pio hilo.
Para poder intercambiar los resultados
intermedios, Isolate puede enviar men-
sajes entre ellos. Estos mensajes son
encolados hasta que el Isolate coge algo
de lo que es conocido como un puerto.
Este modelo es reminiscente del que uti-
lizan Erlang o Scala. El Listado 5 mues-
tra un ejemplo completo.
El programa del ejemplo primero
recibe un nuevo objeto Receptor que se
ejecuta en un hilo separado con
spawn(). Despus de esto, enva en el
objeto cuatro palabras en sucesin. Tan
pronto como el objeto recibe una pala-
bra, la muestra en pantalla. El Isolate
siempre da un puerto al objeto que
enva el mensaje en la forma de replyTo.
Esto significa que puede responder
directamente a su llamante.
Los Isolates se ejecutan en espacios de
memoria separados. Un efecto positivo
de esto es que el recolector de basura
puede gestionar cada Isolate individual-
mente. En cambio, la mquina virtual
necesita copiar los mensajes entre el Iso-
late. En el futuro, los Isolates podrn
incluso utilizar distintas libreras de Dart
con diferentes versiones.
Acceso DOM
Debido a que Dart fue diseado para
reemplazar Javascript, los programado-
res deben ser capaces de utilizar el len-
guaje para acceder al rbol DOM de un
sitio web. Para que esto suceda, Dart
incluye su propia librera que podemos
importar de esta forma:
#import(dart:html);
Despus de eso, podemos utilizar la
siguiente expresin para acceder a una
capa <div>con el ID menu:
document.query(#menu);
Los elementos pueden ser localizados
utilizando selectores de CSS en un estilo
muy similar a jQuery. Los programas de
Dart pueden utilizar otras clases y fun-
ciones para establecer conexiones HTTP
(palabra clave AJAX), procesar datos
JSON e incluso acceder al sistema de
dentro de la misma clase. En el Listado
2, esto implica que no podemos modifi-
car retroactivamente la altura de un rec-
tngulo.
Ventas de la Factora
Los patrones de diseo [4] han sido parte
del repertorio de los desarrolladores pro-
fesionales durante varios aos. Por lo
tanto, no es una sorpresa que Dart
soporte esta caracterstica. Por ejemplo,
el patrn de factora forma parte del len-
guaje. Si prefijamos el constructor con la
palabra clave factory, Dart no crea auto-
mticamente un objeto de esta clase, deja
la tarea para el constructor. El programa-
dor puede entonces mirar en la cach
para ver si un objeto coincidente ya
existe, como podemos ver en el Listado 3.
La variable otrocoche en el ejemplo,
apunta al mismo objeto que uncoche. La
palabra clave static asegura que garaje
exista slo una vez, por lo que todos los
objetos Coche acceden a la misma varia-
ble.
El patrn de factora puede ser combi-
nado con interfaces. Para ello, podemos
asignar la clase estndar de factora a
una interfaz, devolviendo objetos que
coincidan con la interfaz. El Listado 4
muestra un ejemplo de esto. La interfaz
define la firma del constructor, que
devuelve a continuacin objetos que
coincidan con la interfaz. CocheFactoria
en el Listado 4 devolver tanto el objeto
Cochecarreras como Salon, dependiendo
del fabricante que se le pase. Durante la
DESARROLLO Dart
42
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
DESARROL
Listado 5: Comunicndose con Isolate
01 class Receptor extends Isolate {
02 main() {
03 port.receive((mensaje, responderA) {
04 if (mensaje == null) port.close();
05 else print(Recibiendo: ${men-
saje});
06 });
07 }
08 }
09
10 main() {
11 new Receptor().spawn().then((port) {
12 for (var mensaje in [Esto, es, una,
Prueba]) {
13 port.send(mensaje);
14 }
15 port.send(null);
16 });
17 }
ficheros, entre otras cosas. Para una lista
completa, podemos leer la referencia de
su API [5].
Ejecutando
Ya que los navegadores de hoy en da
actualmente no comprenden los progra-
mas en Dart, el proyecto Dart ha desa -
rrollado el compilador Dartc, que con-
vierte programas Dart a cdigo Java -
script. Sin embargo, Dartc tiene la repu-
tacin de crear programas de Javascript
extremadamente largos que se ejecutan
lentamente. Para solucionar este pro-
blema, se cre un compilador GNU lla-
mado Frog (e incluso escrito en Dart)
que genera cdigo Javascript mucho ms
compacto. Frog y una mquina virtual
para la lnea de comandos (Figura 2)
estn incluidos en el SDK Dart, que est
disponible libre de cargo desde el pro-
yecto en su pgina de inicio [6]. Todo lo
que necesitamos es descargar el archivo
ZIP, descomprimir y compilar nuestro
propio programa en Dart (p.ej., test.dart)
utilizando Frog desde el directorio bin,
./frogc --enable_type_checks U
test.dart
o ejecutar el programa directamente en
la mquina virtual:
./dart --enable_type_checks U
test.dart
El parmetro --enable_type_checks ase-
gura que el compilador, o la mquina
virtual, activa la verificacin de tipos.
Si no queremos utilizar el SDK en
estos momentos,
podemos ejecutar
nuestros propios
programas direc-
tamente en el
sitio web del pro-
yecto Dart en lo
que es conocido
como el Dartbo-
ard [7] (Figura 3).
Dartboard integra
la mayora de las libreras del lenguaje
fuera de la caja (con la excepcin de
dart:html), donde los programadores
necesitan utilizar import si quieren tra-
bajar con la lnea de comandos de la
mquina virtual.
Finalmente, podramos utilizar Dar-
tium, una versin especial del navega-
dor Chromium que incluye una mquina
virtual de Dart [8]. Podemos comprobar
la especificacin completa de lenguaje
Dart [9] y el cdigo fuente de varios pro-
gramas Dart bastante largos [10] en el
sitio web dartlang.org.
El Futuro
Con la excepcin de Dartium, todos los
navegadores de hoy en da ignoran a
Dart y es algo que no podemos repro-
char. Despus de todo, el lenguaje de
programacin no est ni cerca de estar
completo. Al mismo tiempo, est enfren-
tndose a crticas muy dolorosas. La
mayora de los observadores sienten que
soportar otro lenguaje web de programa-
cin es superfluo y contraproducente.
El futuro de Dart depender en gran
medida de la estrategia de Google, ya
que tiene el poder de afirmar este len-
guaje y si llega a
dispositivos
Android y al nave-
gador Chrome,
otros fabricantes de
navegadores no
podrn mirar a otro
lado. Sin embargo,
el peligro es que la
comunidad de opo-
nentes a Dart lle-
guen a convertirse
en una realidad,
con lo que nos lle-
vara una vez ms
a la fragmentacin
en la web.
Dicho esto,
incluso los crticos
deben admitir que los programas de
Dart son ms fciles de leer y compren-
der que sus equivalentes en Javascript.
Gracias a la genuina orientacin a obje-
tos, son posibles aplicaciones web ms
grandes y ms fcilmente mantenibles.
La perspectiva de un nico lenguaje
para el cliente y el servidor es algo ten-
tador los programadores web no ten-
dran que necesitar cambiar constante-
mente entre Javascript y PHP (por
ejemplo). Pero incluso si uno no viene
del campamento Java, es sencillo
encontrar el camino en muy poco
tiempo. Finalmente, el lenguaje es
organizado de una manera abierta, en
contraste con Java y cualquier usuario
puede enviar propuestas para mejo-
rarlo. Al menos, as ha sido el proceso
hasta el momento.
Dart DESARROLLO
43
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 3: La herramienta online Dartboard permite a los desarrollado-
res probar pequeos programas Dart directamente en el navegador.
[1] Proyecto Dart:
http:// www. dartlang. org
[2] Objetivos de diseo Dart:
http:// www. dartlang. org/ docs/
technical-overview/ #goals
[3] Licencia Google BSD:
http:// code. google. com/ intl/ de-DE/
google_bsd_license. html
[4] Patrones de diseo:
http:// en. wikipedia. org/ wiki/
Software_design_pattern
[5] Referencia API Dart:
http:// api. dartlang. org
[6] Dart-SDK: http:// www. dartlang. org/
docs/ getting-started/ sdk/
[7] Dartboard: http:// try. dartlang. org
[8] Navegador Dartium:
http:// www. dartlang. org/ dartium/
[9] Sintaxis de lenguaje Dart:
http:// www. dartlang. org/ docs/ spec/
[10] Programas de ejemplo Dart:
http:// www. dartlang. org/ samples/
[11] Listados para este artculo:
http:// www. linux-magazine. es/
Magazine/Downloads/89
RECURSOS
Figura 2: El SDK Dart incluye una mquina virtual para la lnea de
comandos.
C
ortar texto en el escritorio con el
ratn y pegarlo en alguna parte
es una caracterstica til y ni
siquiera los ms fervientes partidarios de
la lnea de comandos pueden negar este
hecho. Si miramos ms de cerca, el ges-
tor de ventanas del escritorio de Linux
realmente soporta dos mecanismos de
buffer diferentes: seleccin primaria y el
portapapeles [1].
Si utilizamos el ratn para seleccionar
una lnea de texto, podemos llevar el
contenido de esta seleccin primaria a
otra parte pulsando el botn central del
ratn. En contraste con esto, el portapa-
peles aguarda a que el usuario active
el mecanismo de copia despus de
seleccionar algo (tpicamente
usando CTRL-C o desde el men Edi-
tar | Copiar en una aplicacin grfica
y llamamos a la funcin pegar al llegar
al objetivo (CTRL-V o Editar | Pegar).
Usuarios Confundidos
Las aplicaciones pueden implemen-
tar uno o ambos mtodos y es por
eso que a menudo hay confusin y
frustracin entre los usuarios. Mien-
tras que, por ejemplo, un simple xterm
slo soporta la seleccin primaria, el
reproductor Adobe Flash slo admite el
mecanismo del portapapeles. Si quere-
mos transferir el texto desde un xterm a
un formulario renderizado en el repro-
ductor de Flash, no es nuestro da de
suerte. El navegador Google Chrome
soporta tanto seleccin primaria como
portapapeles, pero si la aplicacin web
evernote.com se ejecuta en Chrome, la
seleccin primaria ya no funciona. Llega-
dos a este punto, sobreviene la confu-
sin.
Si copiamos una direccin URL desde
una ventana de texto y queremos utili-
zarla para acceder y mostrar la corres-
pondiente pgina web en un navegador,
descubriremos que la URL en el texto
contiene un salto de lnea y que el
navegador slo recibe la primera
parte. Ahora bien, debo admitir
que soy un tenaz y experto
usuario de UNIX. Leo mis
correos electrnicos con
pine en una ventana
screen y para asegurarme
de que las direcciones URL
de este tipo se transfieren
correctamente, configuro el
valor de editor.singleLine.paste-
Newlines a 3 en el archivo
about: config de Firefox.
Ayuda para Chrome
Por desgracia, Chrome no
puede hacer esto lo que explica
que haya un icono de un som-
DESARROLLO Perl: Copia y Pega
44
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Scripts de Perl que aaden tiles opciones para ampliar el cortar y pegar
Para Llevar
Un par de lneas de cdigo es todo lo que se necesita para crear sencillos scripts de Perl que mejoran la fun-
cin bsica de cortar y pegar del escritorio de Linux, aadiendo buffers para ahorrar tiempo al editar.
POR MIKE SCHILLI
brero con una hlice en mi panel de
Gnome en el borde superior de la panta-
lla con el script del Listado 1 tras l
(vase la Figura 1). Este script [2] recoge
la URL de la seleccin principal, elimina
los espacios en blanco y saltos de lnea y
le pasa la URL limpia al navegador
Chrome.
Para acceder a la seleccin primaria
del escritorio, el Listado 1 se basa en el
mdulo Clipboard de CPAN ([3]). Tras el
escenario, el mdulo utiliza el programa
xclip que pertenece a bases grficas de
Linux, el sistema X-Window. Podemos
instalar xclip en Ubuntu tecleando sudo
apt-get install xclip. En comparacin a
usar xclip directamente, el mdulo CPAN
ofrece la ventaja de que tambin funcio-
nar en un ordenador Mac o Windows,
ya que cambia automticamente a los
mecanismos nativos de portapapeles de
estas dos plataformas.
El Sombrero Despega
Debido a que el mdulo de portapapeles
se instal utilizando el shell de CPAN,
pero con nuestra ID de usuario, en nues-
tro directorio personal, y no bajo el
directorio root, local::lib apunta el intr-
prete Perl al directorio local. El mdulo
paste de la clase Clipboard recoge el con-
tenido de la seleccin primaria actual. La
lnea 10 utiliza una expresin regular
para eliminar saltos de lnea no deseados
y el comando system llama al navegador
Chrome con la URL como su argumento.
Si se aade el script al panel en forma de
Lanzador de aplicacin personalizado
con un icono fcilmente identificable
seccin keybinding_commands (vase
la Figura 4).
Esto permite al usuario la posibilidad
de seleccionar texto en una aplicacin
que no soporta el portapapeles y agrupar
el texto fuera en el portapapeles pulsando
CTRL+ALT+C. En la aplicacin de des-
tino, que no soporta seleccin primaria,
todo lo que tenemos que hacer es presio-
(vase la Figura 2)
pulsando con el
botn derecho y
seleccionando Aa-
dir al panel, el
usuario slo tiene
que pulsar en el
sombrero con la
hlice tras seleccio-
nar la direccin
URL (sin el comando copiar) para indi-
carle al navegador Chrome que ponga en
marcha con la URL saneada para que el
navegador pueda seguir con xito un
enlace.
Copia del Botn de
Escritorio
Para resolver el problema de comunica-
cin que mencionamos anteriormente
entre xterm y Flash Player, el Listado 2
toma la seleccin primaria y la lleva al
portapapeles. Para permitir a los usua-
rios que ejecuten este comando mientras
se trabaja en una
aplicacin que no
entiende el meca-
nismo del portapa-
peles, el programa
gconf-editor de la
Figura 3 define un
mapa global de cla-
ves en el gestor de
ventanas Metacity
de Gnome. Si el
usuario pulsa la
combinacin de
teclas
CTRL+ALT+C
(definida en la sec-
cin global_keybin-
dings), despus de
hacer una selec-
cin, Metacity
activa el comando
configurable
run_command_2,
que apunta al script
del Listado 2, segn
lo establecido en la
Perl: Copia y Pega DESARROLLO
45
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
01 #!/usr/local/bin/perl -w
02 use strict;
03 use local::lib;
04 use Clipboard;
05
06 my $browser =
07 /usr/bin/google-chrome;
08 my $url = Clipboard->paste;
09
10 $url =~ s/\s+//g;
11
12 system( $browser, $url );
Listado 1: chrome-select
Figura 1: El script de Perl que oculta detrs del sombrero con la hlice
toma la URL de la seleccin primaria de texto y lanza Chrome.
Figura 2: El lanzador de Chrome inicia el
navegador con la URL seleccionada en
X-Window.
Figura 4: que a su vez ejecuta el script primary-to-clipboard para
copiar la seleccin en el portapapeles.
Figura 3: En el administrador de ventanas Metacity de Gnome, al pul-
sar el atajo de teclado CTRL+ALT+C se ejecuta run_command_2
01 #!/usr/local/bin/perl
02 use local::lib;
03 use Clipboard::Xclip;
04
05 my $primary =
06 Clipboard::Xclip
07 ->paste_from_selection(
08 primary );
09
10 Clipboard::Xclip
11 ->copy_to_selection(
12 clipboard, $primary );
Listado 2: primary-to-clipboard
diferentes y luego depositarlas todas en
otra ventana. En un escritorio Gnome
normal esto implicara que el usuario
deber ir y volver N veces entre el origen
y el destino, tomando un fragmento de la
fuente y llevndola al destino cada vez.
Para resolver este problema, el Listado
3 implementa una pila persistente sobre
la cual el usuario puede llevar el conte-
nido de la seleccin primaria. Para que
esto ocurra, clipboard-stack push crea
ms espacio en el buffer para ms selec-
ciones con cada una nueva. Para reem-
plazar la seleccin actual con una recien-
temente almacenada en la pila, el usua-
rio llama a clipboard-stack pop. El script
almacena los valores en la pila en la
matriz @$stack, usando el mdulo
YAML de CPAN para escribir el conte-
nido de la matriz de forma persistente al
archivo .clipboard del directorio home
del usuario.
Cuando se llama de nuevo al script, el
mtodo LoadFile() del mdulo YAML lee
los datos almacenados. Dependiendo de
si el usuario llama al script con el argu-
mento push o pop, la llamada a &$com-
mand( $stack) de la lnea 23 salta a una
de las funciones definidas. Al script no
se le permite llamar a funciones defini-
das como cadenas de texto dinmicas en
modo strict, por lo que el pragma no
strict refs de la lnea 22 levanta tempo-
ralmente esta restriccin. La funcin
push() definida en la lneas 29 a 35 uti-
liza el mtodo paste() de la clase Clipbo-
ard para leer el texto seleccionado y
meterlo en la pila. La funcin pop() defi-
nida en la lnea 35 copia el contenido
archivado a la seleccin primaria lla-
mando al mtodo copy(). Cuando el
usuario pulsa el botn central del ratn,
el contenido archivado sale fuera.
Para evitar la necesidad de que los
usuarios llamen a los scripts de Perl de
alguna manera retorcida mientras hacen
malabares con el contenido de la selec-
cin, se han aadido dos entradas al
panel de Gnome para la pila de selec-
cin, representadas por dos iconos muy
atractivos con forma de flechas (que he
descubierto bajo /usr/ share/ icons/
Human/ 48x48/ actions como edit-
redo.png y edit-undo.png), que cuidan
de push y pop (vanse las Figuras 5 y 6).
Ntese que una combinacin conse-
cutiva de push y pop no hace nada.
Podemos pegar la seleccin primaria en
cualquier lugar directamente, pero si
queremos guardar la seleccin en el
archivo antes de hacer una seleccin
adicional, la pila ofrece la funcionalidad
necesaria en forma de push. Si ya no
necesitamos la seleccin actual, pode-
mos recuperar la seleccin archivada
efectuando un pop.
Clic, Clic, Clic
En lugar de recuperar el siguiente ele-
mento alineado en el archivo del porta-
papeles despus de cada operacin de
pegar, sera revolucionario permitir al
usuario pulsar N veces y seguir autom-
nar CTRL+V para insertar el texto dese-
ado. El script usa los mtodos indocu-
mentados paste/ copy_from_selection deri-
vados de la clase Clipboard::Xclip, por-
que la clase bsica Clipboard no permite
ninguna distincin entre los dos buffers.
Cortar/ Pegar con
Esteroides
Algunos lectores habrn deseado alguna
vez disponer de varios buffers para cor-
tar y pegar, para recabar N secciones
DESARROLLO Perl: Copia y Pega
46
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
01 #!/usr/local/bin/perl -w
02 use strict;
03 use local::lib;
04 use Clipboard;
05 use YAML
06 qw(DumpFile LoadFile);
07
08 my($home) = glob ~;
09 my $clipboard =
10 $home/.clipboard;
11
12 my $stack = [];
13 $stack = LoadFile( $clipboard )
14 if -f $clipboard;
15
16 my( $command ) = @ARGV;
17
18 die usage: $0 [push|pop]
19 if !defined $command;
20
21 {
22 no strict refs;
23 &$command( $stack );
24 }
25
26 DumpFile( $clipboard, $stack );
27
28 #############################
29 sub push {
30
################################
#######
31 my($stack) = @_;
32
33 push @$stack,
Clipboard->paste;
34 }
35
36
################################
37 sub pop {
38
################################
39 my($stack) = @_;
40
41 Clipboard->copy(
42 pop @$stack );
43 }
Listado 3: clipboard-stack
Figura 5: Aadimos el apilador del portapa-
peles al panel de Gnome.
Figura 6: La flecha verde mete la seleccin
actual en la pila y la flecha naranja la saca de
nuevo de all.
01 #!/usr/local/bin/perl -w
02 use strict;
03
04 my @words = qw(yes no maybe
so);
05
06 for my $word ( @words ) {
07
08 open my $pipe, |-,
09 qw(xclip -verbose
10 -selection
CLIPBOARD -loops 2);
11
12 print $pipe $word;
13 close $pipe or die;
Listado 4: multipaste
ticamente cada vez la seleccin primaria
con el siguiente elemento archivado.
Esto ayudara, por ejemplo, a rellenar
formularios web o PDF si se conoce el
orden de los campos y se han organizado
los datos en buffers ampliados del porta-
papeles en el orden correcto. En este
caso, el usuario slo tendr que saltar de
un campo a otro y realizar un comando
de pegado en cada uno.
El Listado 4 implementa este mtodo
llamando a xclip directamente. Por contra
el script presentado anteriormente, en
lugar de utilizar la seleccin primaria,
utiliza el bfer del portapapeles, que se
llena pulsando CTRL+C (Editar | Copiar)
y se vaca pulsando CTRL+V (Editar |
Pegar). Este script surge porque original-
mente lo cre para rellenar datos en el
formulario de la aplicacin del reproduc-
tor de Flash. Si omitimos -selection CLIP-
BOARD, en su lugar accede a la seleccin
primaria y en vez de pulsar CTRL+V
varias veces, slo tenemos que seguir
presionando el botn central del ratn.
El script repite una fila de palabras
(yes, no, maybe, so), metindo-
las una a una en el portapapeles y espe-
rando (-loops 2) hasta que el usuario
libere la seleccin actual con el comando
pegar. Esta accin reanima el comando
xclip bloqueado y el bucle del script Perl
entra en la siguiente vuelta. A la
siguiente llamada a xclip se le da la
siguiente palabra a travs de la tubera
abierta por open.
En la Figura 7, el usuario ha accedido
a los diversos campos del formulario de
inscripcin con el ratn o la tecla de
tabulacin, despus de llamar a multi-
paste en otra ventana, y ha presionado
CTRL+V para lanzar un proceso de
pegado en cada caso. Una tras otra, las
palabras empaquetadas en el bfer lle-
gan a borbotones.
En otras palabras, si necesitamos regu-
larmente rellenar los mismos formula-
rios web y no podemos automatizar el
proceso mediante el uso de APIs o con
un screenscraper, podemos utilizar un
script como multipaste para preparar los
valores en el orden correcto por adelan-
tado y luego, de forma manual, rellenar
campo a campo e introducir los valores
correctos sin tener que pensar en ellos,
sin tener que preocuparnos por errores
tipogrficos y de hecho, sin ninguna
preo cupacin en absoluto.
Perl: Copia y Pega DESARROLLO
[1] Listados de este artculo:
http:// www. linux-magazine. es/
Magazine/ Downloads/ 89
[2] X Selections, Cut Buffers, and Kill
Rings, Jamie Zawinski:
http:// www. jwz. org/ doc/ x-cut-and-
paste. html
[3] Mdulo clipboard de CPAN:
http:// search. cpan. org/ ~king/
Clipboard-0. 13/
RECURSOS
Figura 7: El usuario llam primeramente a
multipaste, luego se movi de campo a
campo y presion CTRL+V en cada ocasin.
ADMINISTRACIN La Columna de Charly: Bsqueda GeoIP
WWW. L I NUX- MAGAZI NE. ES
comercial. Tecleando geoiplookup linux-
foundation. org aparecera el siguiente
resultado:
GeoIP Country Edition:US, U
United States
GeoIP City Edition, Rev 1: U
US, OR, Medford,N/A, 42.326500,U
-122.875603, 813, 541
GeoIP ASNum Edition: AS3701 U
Oregon JointGraduate Schools U
of Engineering
Para los servidores web podemos utilizar
el mdulo libapache2_mod_geoip. De
esta forma los puedo redirigir a las pgi-
nas del sitio web correspondientes a su
idioma basndome en su procedencia.
Clasificando por Pases
Para realizar una clasificacin por pases,
tengo que aadir las siguientes lneas a
mi fichero httpd.conf.
GeoIPEnable On
GeoIPDBFile <I>/usr/shareU
/geoip<I>/geoip.dat
Puede que haya que modificar la ruta
segn la configuracin. Luego tan slo
tengo que aadir las lneas del Listado 1
a mi fichero .htaccess.
La precisin de los datos geodsicos es
casi siempre bastante buena, por lo
T
odas las distribuciones
populares incluyen uno o
varios paquetes capaces de
identificar el pas de origen de una
direccin IP. En la mquina
Ubuntu de mi laboratorio, utilizo
los paquetes geoip-bin y
geoip-database. Ahora, ya podre-
mos utilizar el comando geoiploo-
kup y geoiplookup6 para las direc-
ciones IPv6, con una direccin IP
o un nombre como parmetro de
la lnea de comandos:
geoiplookup linuxfoundation.org
GeoIP Country Edition: US, U
United States
En la mayora de las ocasiones, tan slo
necesito averiguar de qu pas procede la
direccin IP. Mi filtro de spam utiliza esta
tcnica para determinar el domicilio de
los cinco spammers ms prolferos de
cada da. La Figura 1 muestra que es Ale-
mania, pero probablemente sea porque
hice la captura de pantalla un domingo.
Durante la semana es raro que Alemania
aparezca entre los cinco primeros.
Si nos hiciera falta mayor precisin
es decir, no slo el pas, sino la ciudad,
regin u organizacin podemos utilizar
los datos de GeoIP de un proveedor
Tierra a la Vista!
El da a da del administrador de sistemas: Bsquedas GeoIP
La aldea global es lo suficientemente grande como para querer averiguar donde se encuentran nuestros ami-
gos y nuestros enemigos. Charly ofrece una rpida introduccin a la geografa basada en IP.
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 seguri-
dad del cortafuegos, la disponibilidad y
cuidado de la DMZ (zona desmilita-
rizada). Divide su tiempo libre entre el
calor, la humedad y Oriente donde se
divierte cocinando, visitando acuarios y
aprendiendo japons respectivamente.
menos a nivel de pases, pero siempre
hay excepciones.
Los proveedores de telefona inalm-
brica redirigen su trfico HTTP por
medio de proxies. Dependiendo de la
carga de la red, el proxy podra encon-
trarse en un pas vecino, levantando la
sospecha de una emigracin en masa.
01 #Direcciones IP con dominio.de
02 RewriteEngine on
03 RewriteCond %{ENV:GEOIP_COUN-
TRY_CODE} ^DE$
04 RewriteRule ^(.*)$
http://www.example.com/de
05
06 #El resto ve las pginas en
Ingls:
07 RewriteEngine on
08 RewriteRule ^(.*)$
http://www.example.com/en/
Listado 1: .htaccess
Figura 1: Alemania es la campeona del mundo! Al menos este domingo y para el sistema antispam de
Charly con el sistema de bsqueda GeoIP integrado.
48
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
U
na cosa que me gusta de la compu-
tacin en la nube es ser capaz de
desplegar una docena o ms de sis-
temas con un slo clic. Nunca ha sido tan
sencillo probar y desplegar grandes siste-
mas escalados. Adems, no tenemos que
pelearnos con los fallos de hardware. En
lugar de tener que conducir a donde se ha
cado un servidor a las dos de la madru-
gada para arreglarlo, simplemente pode-
mos iniciar una instancia nueva o detenerla
e iniciarla de nuevo, que en la mayora de
los proveedores de nube resulta ser
el uso de un nuevo servidor
fsico. Dos clics y una
espera de dos minutos
contra la conduccin
a las dos de la
madrugada, no es
una decisin difcil
de tomar (sobre
todo en invierno).
Tambin podemos
apagar los servido-
res que ya no nece-
sitemos y dejar
de pagar por
ellos, lo cual es algo que le gustar a nues-
tro director financiero.
Parece que muchas empresas, gobiernos
e incluso militares siguen esta corriente.
Amazon ha desplegado GovCloud en los
Estados Unidos, adaptado para el uso del
gobierno de los EE.UU. y no permite usua-
rios no gubernamentales en el servicio.
Cmo debemos auditar y asegurar todos
estos sistemas? Comenzamos con una ima-
gen de oro una instalacin del SO que
est configurado y bloqueado por adelan-
tado.
En el siguiente paso podemos crear
imgenes de oro actualizadas cada
vez que venga una actualizacin
de seguridad y reiniciar todos los
servidores. Adems de ser capa-
ces de instalar parches de segu-
ridad y actualizaciones, tambin
necesitaremos detectar y cam-
biar configuraciones cuando sea
necesario. Por ejemplo, Apache
Range Header Denial of Service
tiene una solucin que evita la
explotacin, pero acceder
manualmente a modificar
el httpd.conf y reiniciar
Apache en unos cuan-
tos cientos de servi-
dores no es una
buena idea.
Estndares de Seguridad
Otro aspecto de la seguridad es la dificultad
de dar con las normas que abordan todos
los problemas potenciales. Necesitamos
un aviso indicando que el acceso no autori-
zado est prohibido y que esta actividad
debe ajustarse a los trminos del servicio o
a una poltica aceptable de uso? No lo s,
depende de cada jurisdiccin. Qu pasa
con todos los servicios que se ejecutan de
manera predeterminada en un sistema
moderno? Es seguro ejecutar Avahi? Qu
pasa con rpcidmapd? Qu pasa con dm-
event, sm-client o mcelog?.
La buena noticia es que los gobiernos de
todo el mundo se han puesto a pensar real-
mente en estos problemas para llegar a
estndares de seguridad. Los ejemplos
incluyen las Guas de Implementacin Tc-
nica de Seguridad (Security Technical Imple-
mentation Guides STIG)[1] puestas por la
Agencia de Sistemas de Informacin de la
Defensa (Defense Information Systems
Agency ) y cubren todo, desde Active Direc-
tory a Firefox y Apache HTTPD. Otro buen
ejemplo son las Lneas Base de
Configuracin del Gobierno de los Estados
Unidos US Government Configuration Base-
line (USGCB). Si bien estn enfocadas
hacia Windows, tienen algunos excelentes
contenidos para Linux (Red Hat 5 en parti-
cular) [2], incluyendo un script de arran-
que rpido que nos proporcionar en gran
medida una instalacin segura predetermi-
nada. La otra ventaja de muchos estnda-
res del gobierno de los EE.UU. es que no
slo contienen las metas de seguridad
general (por ejemplo, reforzar las contra-
seas fuertes), sino que tambin contie-
nen detalles exactos de lo que necesitamos
en distintos sistemas operativos para cum-
plir con ellas.
SCAP
Security Content Automation Protocol
(SCAP) [3] es el mejor ejemplo de la seguri-
dad gubernamental. Se trata de una combi-
Imgenes de Oro
Nubes Seguras
Herramientas del tipo OpenSCAP y Aqueduct pueden hacernos la vida ms fcil implementando estndares
de seguridad en la nube. POR KURT SEIFRIED
Inseguridades: Nubes Seguras ADMINISTRACIN
49
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
ADMINISTRACIN Inseguridades: Nubes Seguras
50
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
nacin de varios protocolos de seguridad
que incluye CCE (el cual maneja la
configuracin de sistemas), CWE (que
maneja la identificacin de tipo de vulnera-
bilidad) y XCCDF (que se puede usar para
crear listas de comprobacin de seguridad
para las personas y el uso de software).
El estndar SCAP est tambin diseado
para evitar el bloqueo del proveedor, termi-
nando con el bloqueo de formatos de infor-
macin de seguridad (por ejemplo, defini-
ciones XML personalizadas o formatos
binarios extraos) y software. En un
esfuerzo cada vez mayor en ltima instan-
cia, SCAP debe proporcionar un conjunto
completo de herramientas, formatos de
datos, formatos de informacin, normas de
seguridad, etc., que se puedan utilizar para
proteger los sistemas y automatizar la audi-
tora, el cumplimiento y la remediacin.
OpenSCAP
Tambin hay disponible una implementa-
cin de cdigo abierto de SCAP. OpenSCAP
[4] proporciona un conjunto de bibliotecas
para manejar el anlisis de documentacin
SCAP y an ms importante, proporciona
un scanner de seguridad que puede tomar
contenido SCAP, explorar los problemas de
un sistema y producir un estupendo
informe que se puede usar para arreglar
estos problemas. La instalacin es sencilla
[5], en Red Hat simplemente
yum install openscapU
openscap-contentU
openscap-utils
y para tener la interfaz grfica
yum install scap-workbench
La Interfaz Grfica de Usuario es realmente
til si estamos construyendo una imagen
maestra de oro (hacer un cambio, volver a
ejecutar la exploracin, esperar ms barras
verdes). En mi opinin, la interfaz de lnea
de rdenes tiene ms valor, especialmente
en trminos de computacin en nube. Una
pregunta con truco: cuntos sistemas
puede gestionar un nico administrador si
tiene que usar la interfaz de lnea de rde-
nes? Respuesta: todos al mismo tiempo.
La nica desventaja de las exploraciones
de seguridad basadas en SCAP es que algu-
nas de las pruebas incluyen cosas como
Find Unauthorized SGID System Executa-
bles, lo que bsicamente hace un listado
completo del sistema de archivos. Esto
podra no ser muy
malo salvo que una
serie de pruebas
desencadenaran este
comportamiento, de
manera que una
exploracin puede
tardar desde varios
minutos hasta ms de
una hora en un servi-
dor de archivos de
gran tamao.
Remediar
Problemas de
Seguridad
Una vez identificado un problema de segu-
ridad, el siguiente paso es arreglarlo? Para
algunos problemas, este proceso puede
resultar sencillo, pero no para todos. Un
buen ejemplo es xinetd. Supongamos en
aras de la argumentacin, que nuestra pol-
tica de seguridad dice que xinetd debe de -
sactivarse. Cmo debemos hacer para de -
sactivarlo? Podemos usar chkconfig para
desactivar xinetd, pero esto hace realmente
sencillo volver a activarlo posteriormente.
Una opcin ms permanente puede ser
eliminar enteramente el paquete xinetd
no es el fin del mundo, no? Un problema
son las dependencias. Qu pasa si un
paquete depende de xinetd? o qu pasa si
en un futuro necesitamos instalar un
paquete que necesita xinetd?, tendremos
que volver a instalarlo? Otra opcin puede
ser desactivar el servicio de xinetd con
disable = yes, pero esto fallar rpida-
mente si se instala un servicio nuevo que
usa xinetd y predetermina que est acti-
vado.
Una posibilidad final puede ser eliminar
el archivo binario de xinetd. Entonces, si
algn programa instala una configuracin
de xinetd con disable = no estaremos
seguros y activar xinetd con chkconfig no
afectar a nada. Sin embargo la siguiente
vez que actualicemos xinetd, el archivo
binario se reinstalar, poniendo el contador
a cero. No s muy bien cul es la moraleja
de esta historia, pero en cualquier caso,
recomiendo encarecidamente volver a eje-
cutar la exploracin de OpenSCAP cada vez
que instalemos o actualicemos software.
Aqueduct
El tema de la remediacin me trae a la
mente a Aqueduct[6]. Aqueduct est dise-
ado para tomar la informacin de seguri-
dad de una configuracin y alinear el sis-
tema con ella. Esto significa que, por ejem-
plo, se puede definir un informe de SCAP
en Aqueduct y ste llevar al sistema a la
conformidad. Por qu no tener nica-
mente a OpenSCAP para arreglar los pro-
blemas? Por la sencilla razn de que SCAP
no es el nico protocolo de seguridad; otros
como PCI-DSS, NISPOM, CIS y STIG, tam-
bin merecen consideracin.
Conclusin
Si tenemos que trabajar con los estndares
del gobierno de los EE.UU., herramientas
como SCAP y STIG van a ser crticas para
nosotros. Y si no tenemos que hacerlo
ahora, es probable que las empresas con
las que trabajamos adopten estos estnda-
res en algn momento (porque trabajen
con el gobierno de los EE.UU. o porque
tener sus propios estndares sea muy caro).
Adems, si queremos implementar nues-
tros propios estndares de seguridad, el uso
de herramientas como OpenSCAP y Aque-
duct es mucho ms sencillo que construir
las nuestras propias.
Figura 1: Muestra del banco de trabajo de OpenSCAP durante una
exploracin.
RECURSOS
[1] Security Technical Implementation
Guide:
http:// iase. disa. mil/ stigs/ a-z. html
[2] United States Government Configu-
ration Baseline:
http:// usgcb. nist. gov/ usgcb/ rhel/
download_rhel5. html
[3] Security Content Automation Proto-
col: http:// scap. nist. gov/
[4] OpenSCAP:
http:// www. open-scap. org
[5] Banco de trabajo de SCAP: https://
fedorahosted. org/ scap-workbench/
[6] Aqueduct:
https:// fedorahosted. org/ aqueduct/
Arduino HARDWARE
debido a mi inexperiencia en la cocina,
intent apagarlo con agua metindolo
debajo del grifo pero esa es otra histo-
ria.
Lo que a nosotros nos importa, es evi-
tar ese tipo de situaciones si a alguno de
vosotros todava no os han pasado. Para
ello nos centraremos en monitorizar
nuestra cocina, tanto en cuanto a gases
presentes como a otros posibles peligros.
Fundamentalmente intentaremos imitar
las alarmas de incendios comerciales,
que podemos encontrar en algunos edifi-
cios, aunque de manera casera (Figura
1). Tambin podemos medir multitud de
parmetros peligrosos con el fin de evitar
fugas.
Este artculo tiene especial importan-
cia, ya que con una pequea inversin
podemos evitar grandes riesgos. Porque
como todo el mundo sabe, ms vale pre-
venir que curar.
Monitorizacin de posibles
peligros
En todos nuestro artculos recurrimos a
distintos tipos de sensores: de distancia,
de humedad, de luminosidad Pero en
este caso nos interesan los que midan
potenciales peligros para nuestro hogar.
El fuego es uno de los peligros ms
importantes que necesitamos medir y
para ello vamos a recurrir a una gama de
dispositivos muy variada y con un
pequeo tamao: los sensores de gases.
Para un primer ejemplo, en el que
fabricaremos una alarma casera de
deteccin de incendios, hemos elegido
un sensor de humos [1]. Se trata de un
dispositivo muy pequeo, como pode-
mos observar en la figura 2, con 6 pati-
llas que nos permiten medir la presencia
de varios tipos de gases, pero bsica-
mente nos indica la presencia de humo
debido a la combustin.
Su funcionamiento es bastante sencillo
y similar al de otros muchos sensores de
gases. En la figura 3 podemos ver un
esquema de la asignacin de pines y el
Control de daos en el hogar
PREVENCIN
Utilizamos Arduino para alertarnos de peligros de accidentes en el hogar. Con Arduino podemos saber de
manera inmediata y remota si hay escapes de gas, incendios o inundaciones en nuestra casa.
POR LUIS MARTN
U
na vez ms partimos de una
situacin o posible problema en
nuestro hogar que queremos
solucionar. En este caso, nace de mi pro-
pia experiencia personal durante mi
infancia, ya que por un despiste dej la
sartn con el fuego encendido gracias a
esos maravillosos mandos tctiles de las
cocinas vitrocermicas modernas. Al
intertar bajar a 0 el valor de uno de los
fogones, ya fuese por azar, por el destino
o porque soy un poco torpe, se puso al
valor mximo y yo, despreocupado, me
fui a ver la televisin. Cual fue mi sor-
presa al ver que tras unos pocos minutos
mi saln se estaba llenando de una ligera
neblina, como si de un concierto se tra-
tara, y peor an, el aceite de la sartn se
haba prendido fuego. Acto seguido,
51
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 1: Alarma de incendios convencional
comercializada para profesional.
Figura 2: Sensor de humo utilizado para la
alarma de incendios DIY.
HARDWARE Arduino
52
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
pequeos talleres, y su
configuracin es idntica
a la del sensor de humo.
Podemos utilizar otros
muchos sensores de
gases de similares carac-
tersticas. En las hojas de
caractersticas de cada
uno [3] podemos obser-
var los circuitos bsicos
de cada uno de ellos, por
lo que no nos resultar
difcil. Como podemos
ver en el sensor de CO2
de la figura 4, todos ellos tienen tamao
y encapsulado similar por lo que pode-
mos desarrollar un sistema muy modu-
lar.
Otro de los principales peligros en
nuestra casa, son las posibles fugas o
roturas en las caeras. Para detectarlo
vamos a utilizar un sistema que nos per-
mita saber si hay fluidos cerca o si
hemos sufrido una inundacin. El fluido
que nos importa en este caso es el agua,
por lo que recurriremos a este disposi-
tivo digital que detecta la presencia del
agua [4], gracias la propiedad de sta de
conducir la electricidad. En la parte
superior, como podemos observar en la
figura 5, hay una serie de tiras conducto-
ras que ante la presencia de agua lo acti-
van, poniendo su seal de salida a 1. Por
esto mismo y como veremos en el
cdigo, tomaremos el valor 0
como que no hay fuga de agua.
Puede ser utilizado tambin como
sensor analgico, para medir la
cantidad de agua que hay en con-
tacto con l, aunque a nosotros
no nos interesa esa forma de
medida.
Como estos sensores, podemos
encontrar muchos otros, o incluso
montaje bsico para funcionar. nica-
mente tenemos que alimentar con 5 vol-
tios entre las patillas H (5V y GND) y en
A poner 5 voltios tambin, obteniendo la
seal analgica proporcional a la canti-
dad de humo en B. Como adaptacin
slo necesitamos colocar una resistencia
RL de entre 3K y 30K, entre la seal en B
y masa. En nuestro montaje hemos utili-
zado una de 4K7.
En un segundo montaje en este art-
culo, vamos a utilizar un sensor de
metano [2], para detectar posibles fugas
en nuestra cocina. Nos permite detectar
fuego o escapes de este gas para casas o
fabricarlos nosotros de manera casera.
Todo depender de las exigencias de
nuestro diseo.
Activando la alarma: el
transistor
En nuestro primer ejemplo vamos a
necesitar un dispositivo de indicacin
que nos avise cundo estamos en posi-
ble peligro. En el montaje, utilizaremos
por simplicidad, un zumbador con el
que ya hemos trabajado anteriormente,
pero de cara a un sistema real vamos a
explicar cmo se implementara el con-
trol de una sirena de 12v. Seguro que
con esa alarma no se me habra que-
mado la sartn.
Vamos a utilizar un dispositivo que ya
hemos utilizado en el control del rel del
artculo Centro de control [5], pero del
cul no habamos explicado su funciona-
Figura 5: Sensor digital encargado de la
deteccin de presencia basado simplemente
en el hecho de que el agua conduce la electri-
cidad.
Figura 6: Transistor NPN que podemos utilizar para
activar una sirena de 12v: conexionado y patillaje.
Figura 4: Sensor de CO2 como ejemplo de los
muchos tipos de sensores de gases exis-
tentes.
Figura 3: Esquema bsico de conexin y patillaje del sensor de
humo que vamos a utilizar en los distintos montajes para la
medida de gases.
Listado 1: Alarma de incendios bsica DIY
01 // Variables estticas
02
03 int sensorHumo = A0; //
Declaramos la variable pin del
sensor humo
04 int zumbador = 13; // Declar-
amos la variable pin del zumbador
05
06 // Variables dinmicas
07 int valorHumo = 0; // Variable
para el valor del sensor de humo
08
09 void setup() {
10 // Inicializa el pin del zum-
bador como salida:
11 pinMode(zumbador, OUTPUT);
12 }
13
14 void loop() {
15 // Leemos el valor analgico del
sensor y lo almacenanos en %
16 valorHumo = analogRead(sen-
sorHumo);
17 valorHumo = map
(valorHumo,0,1023,0,100);
18 // Pequeo retardo de tiempo:
19 delay(50);
20 // Si se dispara el nivel de humo
activamos la alarma:
21 if (valorHumo > 60) {
22 digitalWrite(zumbador, HIGH);
23 }
24 else {
25 digitalWrite(zumbador, LOW);
26 }
27 }
miento, el transistor [6]. Cuando contro-
lbamos el rel por medio de una seal
digital, estbamos utilizando un transis-
tor integrado en el mdulo similar al de
la figura 6 para activarlo o desactivarlo.
Un transistor es un dispositivo electr-
nico semiconductor que puede cumplir
funciones de amplificador, oscilador,
conmutador o rectificador dependiendo
de su configuracin, pero lo que a noso -
tros nos interesa es la de conmutar una
Arduino HARDWARE
53
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
tensin sobre un dispositivo, en nuestro
caso una sirena.
Est compuesto por tres zonas llama-
das Colector, Base y Emisor. Y depen-
diendo de cmo se siten cada una de
ellas tenemos 2 tipos de transistores.
Nosotros utilizaremos un transistor
NPN, ya que su emisor va a ir conec-
tado a tierra. Para mas informacin
acerca del funcionamiento del transistor
podis recurrir al tutorial sobre este
componente que nos facilita Arduteka
[7].
Al estar trabajando con 12 voltios, no
es necesario en principio trabajar con el
rel, ya que ste lo utilizaremos para ten-
siones ms elevadas. Por ello, podemos
utilizar el transistor como se indica en la
figura 7, para conmutar la tensin y acti-
var la sirena, utilizando slo una resis-
tencia para limitar la corriente por la
base del transistor. Nuestro transistor
Listado 2: Monitorizacin de dos posibles peligros de la cocina va web
01 //Aadimos la libreras que
vayamos a utilizar
02 #include <SPI.h>
03 #include <Ethernet.h>
04
05 // Definimos la MAC y la IP del
servidor
06 // Identificador del mdulo
Ethernet:
07 byte mac[] = { 0x90, 0xA2, 0xDA,
0x00, 0xFE, 0x70 };
08 // Direccin IP asignada al
Arduino Ethernet Shield:
09 IPAddress ip(192,168,1,191);
10
11 // Inicializa el modo de trabajo
y el puerto a usar
12 EthernetServer server(80);
13
14 // Variables estticas
15 int deteccionLiquido= 2; //
Declaramos la variable pin del
sensor de presencia de liquido
16 int sensorCO2 = A0; //
Declaramos la variable pin del
sensor gas CO2
17
18 // Variables dinmicas
19 int estadoLiquido = 0;
// Variable para estado del sen-
sor de presencia de liquido
20 int valorCO2 = 0;
// Variable para el valor del
sensor de CO2
21
22 void setup() {
23 // Inicializa el pin del sensor
de presencia de liquido como
entrada:
24 pinMode(deteccionLiquido,
INPUT);
25 // Iniciamos la conexin
Ethernet y el servidor
26 Ethernet.begin(mac, ip);
27 server.begin();
28 }
29
30 void loop() {
31 // Leemos el valor digital de
presencia de liquido
32 estadoLiquido =
digitalRead(deteccionLiquido);
33 // Leemos el valor analogico del
sensor y lo almacenanos en %
34 valorCO2 = analogRead(sen-
sorCO2);
35 valorCO2 = map
(valorCO2,0,1023,0,100);
36
37 // Escuchamos los posibles
clientes entrantes
38 EthernetClient client =
server.available();
39 if (client) {
40 //Una peticin HTTP termina
con una lnea en blanco
41 boolean currentLineIsBlank =
true;
42 while (client.connected()) {
43 if (client.available()) {
44 char c = client.read();
45
46 // Comprobar si ha
finalizado la solicitud HTTP
47 if (c == \n && current-
LineIsBlank) {
48 // Mandar cabezera estandar
HTTP
49 client.println(HTTP/1.1
200 OK);
50
client.println(Content-Type:
text/html);
51 client.println();
52
53 client.print
(MONITORIZACION COCINA);
54 client.print( => );
55
56 //Imprimir el valor del
sensor de presencia de liquido
57 client.print([Presencia
de liquido);
58 client.print( = );
59 //Modificamos el dato en
funcion de si existe liquido
60 if (estadoLiquido == 0){
61 client.print(No);
62 } else {
63 client.print(Si);
64 }
65 client.print(]);
66
67 //Imprimir valor de la
medida de CO2
68 client.print( ; [Medida
C02);
69 client.print( = );
70 //Imprimimos el valor de
CO2 en %
71 client.print(valorCO2);
72 client.print( %] );
73
74 break;
75 }
76 if (c == \n) {
77 // Comienzo nueva linea
78 currentLineIsBlank = true;
79 }
80 else if (c != \r) {
81 // Obtener carcter
82 currentLineIsBlank =
false;
83 }
84 }
85 }
86 // Damos un tiempo al servidor
web para recibir los datos
87 delay(1);
88 // Cerramos la conexin
89 client.stop();
90 }
91 }
comentada como un sensor analgico
genrico. El resultado es un detector
casero DIY, que podemos ver en funcio-
namiento en la figura 9.
Para el segundo ejemplo que podemos
ver en la figura 10, tambin de explicacin
sencilla, conectaremos el sensor de pre-
sencia de lquido como un dispositivo
digital, y el sensor de metano como el de
humo del primer montaje. La diferencia
es que lo montaremos encima del mdulo
de ethernet para poder subir estos datos a
la web. El montaje y la utilizacin del
mdulo Ethernet Shield est disponible
en el artculo Hogar en red [8]. El resul-
tado lo podemos observar en la figura 11.
Programacin
En este artculo no explicaremos dema-
siado el cdigo, ya que est formado por
pequeos recortes de cdigo de todos los
anteriores artculos.
En el primero de los cdigos observa-
mos la forma de medir la presencia de
humo, y cuando la medida excede de un
valor definido como normal, activamos la
alarma poniendo en alto el pin asignado.
En el segundo, medimos los valores
analgicos y digitales de los sensores y
subimos estos valores a nuestra web. Los
datos se muestran de manera sencilla, en
la IP asignada a nuestro servidor web,
como podemos observar en la figura 12.
Casa domtica: siguientes
pasos
Como en todos los artculos que hemos
ido viendo, los ejemplos que hemos rea-
lizado son unos montajes y aplicaciones
muy bsicos. Podemos ampliar el
nmero de sensores en funcin de nues-
tras necesidades, o utilizar otro de los
sistemas de comunicaciones que ya
conocemos (GPRS, XBee).
Si en vez de monitorizar la cocina nos
planteamos hacerlo en otra habitacin
de nuestra casa, por ejemplo el trastero/
garaje, debemos estudiar cules son los
peligros ms relevantes y la manera de
cuantificarlos. Una vez tengamos eso
decidido, seguro que encontramos un
dispositivo que lo mida.
funcionar como un interruptor. Si acti-
vamos la seal digital del pin 13, acti-
var la sirena, y si no, la apagar cortn-
dole la tensin.
Diseo del Hardware
En el primero de los ejemplos, el mon-
taje que veis en la figura 8 ya es cono-
cido para nosotros, ya que conectaremos
el zumbador o la base del transistor que
controla la sirena al pin 13 por medio de
una resistencia de 1K, y el sensor de
humo en la configuracin anteriormente
HARDWARE Arduino
54
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 9: Montaje de la alarma de incendios
casera funcionando.
Figura 11: Montaje del sistema de monitoriza -
cin de posibles peligros en la cocina.
Figura 12: Lecturas web de los valores moni-
torizados en nuestra cocina.
Figura 10: Esquema del conexionado del sis-
tema de monitorizacin.
RECURSOS
[1] Sensor deteccin de humos: http://
www. cooking hacks. com/ index. php/
shop/ sensors/ gas/
smoke-sensor-mq2. html
[2] Sensor de gas metano: http:// www.
cooking-hacks. com/ index. php/ shop/
sensors/ gas/ mq4-ch4. html
[3] Diversos sensores de gases:
http:// www. cooking-hacks. com/
index. php/ shop/ sensors/ gas. html
[4] Sensor de presencia de lquidos:
http:// www. cooking-hacks. com/
index. php/ shop/ sensors/ humidity/
twig-water-sensor. html
[5] Artculo Centro de control, de Luis
Martn, Linux Magazine nmero 86,
pag. 58.
[6] Transistor BC547 NPN:
http:// www. cooking-hacks. com/
index. php/ bjt-transistors-npn-bc547.
html
[7] Tutorial bsico del transistor:
www. arduteka. com/ 2012/ 01/
componentes-el-transistor/
[8] Artculo Hogar en red, de Luis
Martn, Linux Magazine nmero 85,
pag. 60.
Figura 7: Esquema de cmo montar el sis-
tema para activar una sirena por medio de un
transistor NPN.
Figura 8: Esquema del conexionado de la
alarma de incendios.
de modo que ZoneMinder puede ver
cuando alguien se mueve por un camino
sin que el movimiento de las ramas a
causa del viento vaya a disparar una falsa
alarma.
Synology y QNAP son dos empresas
que fabrican dispositivos NAS con CPU
ARM. Las unidades ms bsicas vienen
con CPU de 1.2 GHz y 256 MB de RAM y
los modelos superiores incluyen CPU de 2
GHz y 512 MB de RAM. En el rango de los
1,2 GHz, se encuentran la Synology
DS212j y la QNAP TS-212; en el de los 2
GHz, tenemos la Synology DS212+ y la
QNAP TS-219P II, junto con la QNAP TS-
119P II de una nica baha.
Tanto las unidades de QNAP como las
de Synology vienen con su propia distri-
bucin de Linux. Estas dos unidades NAS
permiten que el usuario pueda utilizar el
gestor de paquetes ipkg para instalar soft-
ware de cdigo abierto adicional con el
objeto de complementar el que ya viene
instalado de fbrica. Por ejemplo, se pue-
den instalar los binarios de CoreUtils en
vez de los de BusyBox, que vienen por
defecto.
Configuracin
Si anteriormente no se ha instalado un
dispositivo NAS, el paso inicial para estas
unidades consiste en sacar una (o ms)
de las bandejas de disco, acoplarles un
disco y volverlas a colocar de nuevo en la
unidad. Una vez que se haya encendido y
conectado a la red, se habr finalizado
con la parte del hardware. Por otro lado,
la Synology DS212j se abre en dos mita-
des y hay que atornillar el disco duro
directamente en el espacio interno prepa-
rado para albergarlo antes de volver a
cerrar y atornillar la unidad NAS de
nuevo.
Cuando se enciende la QNAP TS-219P
II, intenta obtener una direccin IP por
DHCP y una vez obtenida dicha direc-
cin, nos podremos conectar por medio
de la interfaz web del dispositivo para
completar la instalacin. La
configuracin inicial de la QNAP TS-
219P II implica la subida de un fichero al
dispositivo de 140 MB con la imagen del
firmware (Figura 2). Tras este paso, el
dispositivo NAS se reinicia y se ejecuta
la distribucin Linux que se acaba de
subir. Nos preguntar algunos parme-
tros de configuracin como la ubicacin,
la contrasea y las preferencias de soft-
ware (Figura 3).
Para muchos propsitos, la combina-
cin de paquetes nativos del proveedor
NAS junto con los paquetes disponibles
por medio de ipkg son suficientes para
nuestros propsitos. Si el software que
nos hiciese falta no se encuentra por
medio de ipkg, podramos compilarlo e
L
os dispositivos NAS actuales a
menudo cuentan con una CPU
interna que ofrece un gran rendi-
miento computacional por vatio consu-
mido. Muchas de estas unidades requie-
ren menos de 10 vatios de consumo para
trabajar con una interfaz de red gigabit
ethernet y la CPU al cien por cien de uso.
Un dispositivo NAS de bajo consumo
podra consumir del 10 al 20 por ciento de
la electricidad que consume un PC.
Entonces surge la primera cuestin: es la
CPU de un dispositivo NAS lo suficiente-
mente rpida como para monitorizar una
o ms cmaras y detectar si se ha produ-
cido algn movimiento?
En este artculo, vamos a examinar si el
QNAP TS-219P II [1], con una CPU Mar-
vell ARM a 2GHz y 512MB de RAM, ser
capaz de detectar el movimiento en
tiempo real (Figura 1). Tngase en cuenta
que la mayor parte del artculo debera
poder aplicarse tambin a su primo
barato de una nica baha, el QNAP TS-
119P II, que viene con la misma CPU/
RAM.
Una solucin de cdigo abierto muy
popular para monitorizar cmaras y
detectar el movimiento es la suite Zone-
Minder [2]. Las cmaras pueden ser tanto
cmaras IP como cmaras USB conecta-
das directamente al servidor o a otro orde-
nador de la red. ZoneMinder puede moni-
torizar todas las cmaras, detectar el
movimiento en reas clave o zonas y noti-
ficar la actividad de las reas de inters.
Las zonas limitan el rea a monitorizar,
56
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Sistemas de almacenamiento conectados a la red vigilan nuestros bienes
Mirada Felina
Aprovchese del bajo consumo elctrico que ofrecen los dispositivos
NAS para monitorizar cmaras de seguridad. POR BEN MARTIN
Figura 1: El dispositivo NAS QNAP TS-219P
II, la cmara TP-Link TL-SC3171G y el disco
duro de 2TB WD Green.
HARDWARE Vigilancia con NAS
B
o
g
d
a
n

I
o
n
e
s
c
u
,

1
2
3
R
F
.
c
o
m
instalarlo nosotros mismos. Este proceso
implica normalmente la creacin de una
mquina virtual con el entorno para la
CPU ARM en un PC y la compilacin en
esta mquina virtual del software corres-
pondiente. Normalmente, las cabeceras
de desarrollo para el software no se sue-
len encontrar en forma de paquetes para
su instalacin en el dispositivo NAS.
Instalacin de Debian
en ARM
Para una personalizacin ms avanzada,
podramos necesitar instalar Debian en
vez del firmware que se incluye. La insta-
lacin de Debian permite el acceso a
ZoneMinder por medio del gestor de
paquetes y realizar de forma ms sencilla
la compilacin del software en el propio
dispositivo NAS.
La primera vez, la instalacin de
Debian en una mquina ARM [3] podra
parecer una tarea ardua. Abundan las his-
torias de gente con dispositivos hardware
medio flasheados que terminan convir-
tindose en caros ladrillos. Para hacerlo
an ms interesante, no tenemos ninguna
pantalla que podamos conectar al disposi-
tivo para poder ver si algo ha salido mal.
Adems, hay que configurar el soporte
necesario propio del hardware particular,
tales como altavoces, LEDs y ventilado-
res.
El proceso de instalacin de Debian es
bastante simple y probablemente ms
simple que la configuracin de un
entorno de compilacin cruzado necesa-
rio para aumentar el software si se quiere
continuar usando el firmware suminis-
trado [4]. Para proceder, se pueden seguir
los siguientes pasos:
Opcionalmente, realizar una copia de
seguridad del firmware de la memoria
flash del dispositivo NAS.
Descargar el flasheador de Debian, el
kernel, los metadatos y los ficheros de
instalacin initrd.
Flashear estos ficheros en la memoria
flash del dispositivo NAS.
Reiniciar.
Conectarse por SSH al dispositivo NAS
y completar la instalacin con la inter-
faz de instalacin de Debian basada en
la consola.
Una vez realizado el ltimo paso, el insta-
lador volver a flashear la memoria del
dispositivo NAS para poder arrancar con
el nuevo sistema Debian.
Aparte del kernel y de initrd residiendo
en la memoria flash del dispositivo NAS,
los pasos restantes para instalar Debian
son casi los mismos que se siguen cuando
se instala en un PC. Como se ver ms
adelante, el paso primero de realizar la
copia de seguridad del firmware existente
es opcional.
El instalador de Debian toma el nom-
bre del host y los parmetros de red que
hayamos configurado con el firmware
normal de QNAP, y los reutiliza para la
instalacin de Debian. La mayora de las
cuestiones son acerca de la ubicacin y
Vigilancia con NAS HARDWARE
57
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
de cmo se quieren particionar los dis-
cos.
En mi instalacin de Debian Wheezy
(Listado 1), los primeros cinco comandos
crean una copia de seguridad de la
memoria flash existente en una memoria
USB. En la lnea 6, los cuatro ficheros del
instalador de Debian mencionados ante-
riormente en el paso 2 son descargados y
el comando flash-debian de la lnea 8 los
graba en la memoria flash de la QNAP,
listo para cargarse cuando se reinicie el
dispositivo NAS.
Tras reiniciarse el dispositivo NAS,
deberamos poder acceder a l por medio
de ssh de la siguiente forma
installer@NAS y como contrasea install.
Probablemente tengamos que borrar la
clave del host del fichero
~/.ssh/known_hosts para evitar que SSH
se crea que se ha cambiado repentina-
mente la clave desde la ltima conexin.
Deberamos poder ver como saludo un
men como el que aparece en la Figura 4.
Hacia el final de la instalacin, se nos
ofrecer la oportunidad de modificar la
seleccin de programas. Es muy impor-
tante que no se nos olvide instalar el ser-
Figura 2: Subiendo la ltima imagen del firmware del sitio QNAP.
Figura 3: Una vez escrito el firmware en el disco, se configuran los
datos de conexin, la ubicacin la IP y los servicios de informacin.
Listado1: Instalando Debian Wheezy
01 # for if in `seq 1 6`; do
02 cat /dev/mtdblock$if > mtd$if
03 done
04 # cp mtd* /share/external/sdi1/
05 # sync
06 # export
DIST=ftp://ftp.debian.org/debian/dists/wheezy/main/installer-armel/
current/images/kirkwood/network-console/qnap/ts-219/
07 # wget $DIST/flash-debian $DIST/initrd.gz $DIST/kernel $DIST/model
08 # sh flash-debian
09 Your MAC address is 00:08:9B:C8:D7:11
10 # reboot
11 # exit
propsito de este artculo, no quera
molestarme instalando un sistema RAID
como proteccin ante el fallo de un disco.
Esta situacin en este escenario pareca
ser el peor caso posible: un disco duro
corrupto, el firmware de la memoria flash
sobrescrito con un software que espera
que el disco funcione y el resultado, que
no arranca y no se muestra.
Afortunadamente, incluso cuando se ha
sobrescrito la memoria flash de esta uni-
dad QNAP, se puede poner en un modo
desde el cual intentar obtener de la red
la informacin que debera encontrarse
en la flash [5]. Incluso mejor, QNAP
ofrece una imagen Linux arrancable que
contiene un servidor TFTP que se encarga
de proporcionar la imagen flash al dispo-
sitivo NAS.
Conectando un porttil directamente al
dispositivo NAS, arrancando el disco de
recuperacin en el porttil y manteniendo
el botn de reinicio presionado cuando se
enciende el dispositivo NAS, se puede
activar el modo de recuperacin. Una vez
que el dispositivo NAS se conecta, se pue-
den or unos pitiditos y ver diversos LED
parpadeando para hacernos una idea de
que est sucediendo algo. Al final, tendre-
mos el dispositivo NAS con el mismo soft-
ware, firmware, que traa cuando los com-
pramos, recuperando de este modo el dis-
positivo NAS personalizado que no arran-
caba.
A continuacin, se puede volver a gra-
bar el instalador de Debian en la memoria
flash del dispositivo NAS y elegir esta vez
un disco duro que realmente funcione.
Por supuesto, en un
sistema en produc-
cin todo el mundo
usa un sistema
RAID en espejo o
tiene un sistema de
copias de seguridad
incremental auto-
matizado a buen
recaudo.
ZoneMinder
Las dependencias
principales de
ZoneMinder son
Perl, MySQL,
OpenSSL, las libre-
ras JPEG, algunos
mdulos de Perl y
(opcionalmente)
FFmpeg. ZoneMin-
der incluye cdigo PHP, C++ y Perl. Tras
instalar Debian en el sistema, podremos
aprovechar los repositorios de paquetes
para instalar ZoneMinder sin tener que
compilarlo nosotros mismos. La instala-
cin es tan simple como invocar el
comando:
apt-get install zoneminder
Como resultado se consumir unos 170
MB de espacio en el disco NAS.
Para iniciar la interfaz web de Zone-
Minder, habr que enlazar su fichero de
configuracin del sitio con el directorio de
Apache, conf.d:
# ln -s /etc/zm/apache.conf U
/etc/apache2/conf.d/U
zoneminder.conf
# /etc/init.d/apache2 restart
Con este enlace creado y Apache reini-
ciado deberamos poder ver la interfaz
web de ZoneMinder en la direccin
http:// NAS/ zm/ (suponiendo que NAS es
la direccin IP del dispositivo).
El botn Add New Monitor en la parte
inferior de la interfaz web de ZoneMinder
permite aadir una cmara nueva al sis-
tema (Figura 5). Para este ejemplo, voy a
utilizar dos cmaras: la TP-Link TL-
SC3171G 640x480 IP y la Logitech C910
USB 1080p. El truco a la hora de configu-
rar las cmaras es conocer cul va a ser la
ruta al host remoto y asegurarnos de que
la resolucin de imagen, anchura y altura
en pxeles coincida con la salida de la
cmara (Figura 6).
Adems, tendremos que saber la direc-
cin IP y el puerto de la cmara, y para
HTTP, ser necesario la URL que hay que
utilizar para obtener los datos de la
cmara. Para una cmara de 640x480,
cabe esperar un consumo del 10 por
ciento de la CPU para que ZoneMinder
procese los datos de la cmara a una tasa
baja de fotogramas [6]. El aadido de
zonas de deteccin de movimiento en
reas crticas de la imagen aadir mayor
consumo de CPU a estas cifras. Mi
configuracin NAS tuvo que utilizar hasta
el 25 por ciento de la CPU para servir el
vdeo de la webcam a 640x480 a Firefox
(Figura 7).
Con la cmara TP-Link enfocando una
escena oscura de exteriores, la deteccin
del movimiento se redujo al 15 por ciento
de la CPU con el tamao de imagen
vidor SSH para que podamos conectarnos
fcilmente al dispositivo NAS cuando se
encuentre ejecutando el sistema operativo
Debian. Tambin, querremos instalar un
servidor web, una base de datos SQL y un
servidor de ficheros desde este men.
Aunque el servidor de ficheros no es real-
mente necesario para ZoneMinder, si dis-
ponemos de espacio libre en nuestro
disco, probablemente deseemos utilizarlo
para otros propsitos.
Una vez finalizada la instalacin, el ins-
talador nos pedir que retiremos el
CDROM o los discos de instalacin (algo
que no tenemos). Tras reiniciar, debera-
mos poder conectarnos por medio de ssh
utilizando el usuario root y encontrarnos
con una mquina Debian. Con un disco
duro de 2 TB WD Green, el dispositivo
NAS debera consumir en reposo unos 10
vatios (Tabla 1).
Desde las Cenizas
Un inconveniente a la hora de utilizar un
firmware personalizado en un hardware
especializado es averiguar lo que hay que
hacer cuando algo falla. El disco de 2 TB
Green era uno que tena por ah sin utili-
zar, y, mientras escriba este artculo, me
acord de la razn por la que no estaba
utilizndolo.
Tras reemplazar el kernel en la memo-
ria flash del dispositivo NAS por el kernel
de Debian y la imagen initrd, el sistema
quera encontrar una instalacin de
Debian que arrancar desde el disco duro.
El problema era que el disco no quera
volver a funcionar de nuevo, y, para el
HARDWARE Vigilancia con NAS
58
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Tabla 1: Consumo con el Firmware Original
Figura 4: Iniciando la instalacin de Debian por SSH.
Vatios Accin
1 NAS apagado pero conectado
7 Disco parado y sin cable de red
8 Disco parado
10 En funcionamiento con el disco girando
13 Disco girando y ejecutando OpenSSL
mayor (640x480) detectando a la tasa de
fotogramas ms baja (Tabla 2).
Memoria Compartida/
Mapeada
ZoneMinder necesita tener las imgenes
recientes que obtiene de las cmaras en
memoria en alguna parte. En las versio-
nes anteriores, utilizaba memoria com-
partida para almacenarlas. Ahora, crea y
utiliza ficheros de memoria mapeada en
/dev/shm. Dependiendo del esquema que
est en uso, habr que configurar el dis-
positivo NAS para que proporcione la
cantidad de memoria necesaria para
albergar estas imgenes.
ZoneMinder 1.25.0 que viene con
Debian Wheezy utilizado en este artculo
usa /dev/shm para las imgenes. La ins-
talacin por defecto lo haca con un sis-
tema de ficheros tmpfs con un tamao
lmite de 100 MB. ZoneMinder necesita
cerca de 100 MB para una cmara de
1280x720 y cerca de 35 MB para una
cmara de 640x480. Para calcular la
memoria necesaria para almacenar las
imgenes de las cmaras, hay que averi-
guar la cantidad de bytes que ocupa un
nico fotograma: ancho (px) x alto (px)
x 3 (RGB). Estas imgenes se almacenan
en un bffer circular en memoria. En mi
instalacin vena por defecto 40 imge-
nes en el bffer para una cmara. El
comando
mount -o remount, U
size=256m /dev/shm
asignar ms memoria a ZoneMinder
para las imgenes. Para que este valor
persista tras reiniciar el sistema, habr
que editar el fichero /etc/default/tmpfs y
establecer SHM_SIZE al valor deseado.
Para ahorrar memoria con cmaras de
mayor resolucin habr que modificar el
nmero de fotogramas Image Buffer Size
en la solapa Buffers de los parmetros de
la cmara. Averig que para utilizar
menos fotogramas, tena que borrar, por
ejemplo, zm.mmap.2 de /dev/shm y dejar
que ZoneMinder creara uno nuevo, un
fichero ms pequeo que cuando acept
la configuracin de la cmara. 20 fotogra-
mas para una cmara de 720p requiere
slo 53 MB de RAM.
Detectando Eventos
Lo que hace que ZoneMinder sea intere-
sante es la posibilidad de detectar movi-
miento en reas crti-
cas de un fotograma
de la cmara y grabar
el vdeo automtica-
mente cuando se per-
cibe dicho movi-
miento. Tras poner la
cmara en el modo de
deteccin de movi-
miento, haciendo clic
en el enlace Function
de la pgina de instala-
cin de ZoneMinder,
podremos asignar una
mscara a los fotogra-
mas haciendo clic en
el enlace Zones de la
cmara. De esta
forma, ZoneMinder
ignora los movimien-
tos que se produzcan fuera del rea de
inters.
La cantidad de CPU necesaria para la
deteccin del movimiento viene determi-
nada por muchos factores: el tamao de
la imagen de la cmara, el nmero de
fotogramas por segundo a procesar, el
tamao de las zonas de deteccin y los
parmetros usados para el algoritmo de
deteccin.
Cuando se hace clic sobre el nombre de
una cmara en ZoneMinder, se muestra
una vista en la
que se puede
ver la imagen en
vivo de lo que la
cmara est
enfocando,
junto con una
lista de eventos
que han sido
detectados recientemente y la posibilidad
de forzar el disparo de una alarma. El dis-
paro de una alarma tiene el mismo efecto
que tendra si ZoneMinder hubiera detec-
tado un movimiento significante en la
escena que capta la cmara.
En mi primera prueba, us la cmara
TP-Link 640x480 a 5 fps. La tarea de
monitorizacin consumi el 15 por ciento
de la CPU y el fuerce de una alarma
supuso un consumo del 26 por ciento de
la CPU. Posteriormente pude confirmar
Vigilancia con NAS HARDWARE
59
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 7: Monitorizando un trozo de madera con ZoneMinder en el
dispositivo NAS.
Figura 5: Aadiendo una cmara en Zone-
Minder.
Figura 6: Configurando una cmara de red en
ZoneMinder.
Tabla 2: TP-Link Uso de la CPU y la RAM
(5fps)
% CPU RAM (RES) Tarea (Process)
6-12 43 Slo monitorizacin de noche (zmc)
15-25 41 Vista desde Firefox (nph-zms)
15 42 Deteccin del movimiento, fotogramas
completos, de noche (zma)
mos utilizar esta CPU, cualquier valor por
encima de 640x480 probablemente oca-
sionar problemas de rendimiento.
Adentrndonos en el Cdigo
Como no observ mucha diferencia en el
uso de la CPU para los diversos algorit-
mos de deteccin de movimiento que
ofrece ZoneMinder, decid diseccionar un
poco el cdigo fuente. El cdigo llama a
Monitor::DetectMotion() para cada foto-
grama para calcular un resultado (canti-
dad de movimiento) y si se tiene o no que
disparar la alarma. Si dicho mtodo
devuelve sin alarma resulta un con-
sumo del 8 por ciento de la CPU para una
cmara de 640x480 a 6 fps.
Una de las primeras cosas que hace
DetectMotion() es crear una imagen delta,
midiendo cunto difiere el fotograma
actual con respecto al fotograma de refe-
rencia. La imagen delta slo registra la
intensidad de la diferencia para cada pxel
en vez de la diferencia para el rojo, verde
y azul. Para crear la imagen delta y
borrarla luego antes de devolver sin
alarma, se requiere el 15 por ciento de la
CPU antes de que se realice ninguna
deteccin del movimiento.
El ncleo del mtodo Image::Delta()
crea una imagen delta y registra qu dis-
tancia hay entre los pxeles actuales y los
pxeles de la imagen de referencia:
...
red = y_r_tableU
[*psrc++ - *pref++];
green = y_g_tableU
[*psrc++ - *pref++];
blue = y_b_tableU
[*psrc++ - *pref++];
*pdiff++ = abs_tableU
[red + green + blue];
...
Las variables son pref, la imagen de refe-
rencia; psrc, el fotograma actual y pdiff, la
imagen delta. Este cdigo podra modifi-
carse para que se ejecutase ms rpido en
las CPU ARM con la extensin NEON [7].
Segn el fichero /proc/cpuinfo, la CPU en
esta unidad QNAP slo tiene disponible
las extensiones swp half thumb fastmult
edsp.
Como los bancos de pruebas muestran
en la Tabla 2, hay una mayor variacin
con la resolucin de la imagen y la tasa de
fotogramas, el trabajo de preparacin y
procesamiento de todos los fotogramas se
llevan la mayor parte del consumo de la
CPU.
Conclusin
Los chips ARM que albergan algunos dis-
positivos NAS modernos proporcionan
una plataforma ideal para algunas tareas
de computacin en tiempo real bastante
interesantes con un consumo limitado de
energa. La CPU Kirkwood de 2 GHz del
dispositivo NAS probado aqu pudo
detectar el movimiento realmente a una
tasa baja de fotogramas con dos cmaras
IP a una resolucin de 640x480 al mismo
tiempo.
Hay que tener en cuenta que el disposi-
tivo hace todo esto con un consumo infe-
rior a 15 vatios, incluyendo el disco duro.
Cuando no sucede ningn evento, la uni-
dad puede bajar a menos de 10 vatios
mientras an monitoriza activamente las
cmaras a la espera de algn movimiento.
La prxima vez que tengamos que
monitorizar cmaras, antes de decantar-
nos por un PC de escritorio que consume
entre 75 y 100 vatios, deberamos consi-
derar la alternativa basada en dispositivos
NAS, ya que puede ser una buena inver-
sin debido a su bajo consumo.
Con una instalacin Debian, el disposi-
tivo NAS tiene acceso a una gran cantidad
de paquetes software que permiten la per-
sonalizacin del dispositivo para realizar
una tarea especfica.
que cuando se dispara la alarma porque
realmente se detect movimiento, el con-
sumo de la CPU fue tambin del 26 por
ciento en el dispositivo NAS.
La monitorizacin con la cmara Logi-
tech C910 por la red con un tamao de
fotograma de 1280x720 a 10fps consumi
el 72 por ciento de la CPU en el disposi-
tivo NAS. A 2 fps, en la misma cmara, el
consumo de CPU descendi al 22 por
ciento. El visionado de la cmara a 2 fps
tuvo un consumo adicional del 40 por
ciento de la CPU.
Est claro que la monitorizacin de
cmaras de 720p a 30 fps va ms all de
las posibilidades de manejo de la CPU
del dispositivo NAS y la deteccin de
movimiento a 10 fps probablemente no
sea posible, pero si se limita a unos
pocos fotogramas por segundo con la
misma cmara, se podra trabajar bien
con la cmara a 720p si slo se tiene
una.
Una cmara USB barata de 640x480
que slo pueda producir vdeo YUYV
conectada al puerto USB2 del dispositivo
NAS monitorizandose a 5 fps necesita
cerca del 15 por ciento de la CPU y el 50
por ciento si se quiere visionar. La detec-
cin del movimiento con los fotogramas
completos requiere en esta cmara un
consumo adicional del 40 por ciento de la
CPU, que pasa al 80 por ciento si salta la
alarma.
El uso de la CPU no cambia demasiado
entre las preconfiguraciones con sensibili-
dad baja, media y alta para el modo
rpido o el modo mejor. Reduciendo el
rea de la alarma a una zona de 100x100
slo se redujo el uso de la CPU al 35 por
ciento.
Si la cmara conectada localmente se
cambia por la Logitech C910 y se prueba
con una resolucin de 1280x720 a 5 fps
se divide el uso de la CPU al 50-50 entre
la monitorizacin de la cmara y la
deteccin del movimiento en los fotogra-
mas.
Esta divisin al 50-50 parece sospe-
chosa ya que la deteccin del movimiento
debera ser una operacin ms costosa
que la simple monitorizacin. Si se
reduce a 3 fps, la monitorizacin slo
consume el 30 por ciento de la CPU y la
deteccin del movimiento pasa al 68 por
ciento. Si se vuelve a los 640x480 a 4 fps,
la monitorizacin pasa al 12 por ciento y
la deteccin del movimiento al 28 por
ciento de la CPU. De modo que, si quere-
HARDWARE Vigilancia con NAS
60
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
RECURSOS
[1] Pgina del producto QNAP TS-219P
II: http:// web. qnap. com/
pro_detail_feature. asp?p_id=211
[2] ZoneMinder:
http:// www. zoneminder. com/
[3] Debian en el NAS QNAP:
http:// www. cyrius. com/ debian/
kirkwood/ qnap/ ts-219/
[4] Documentacin sobre el instalador
de Debian para ARM:
http:// d-i. alioth. debian. org/ manual/
en. armel/ index. html
[5] Recuperacin del firmware de
QNAP: http:// wiki. qnap. com/ wiki/
Firmware_Recovery
[6] Discusin sobre la CPU de ZoneMin-
der: http:// www. zoneminder. com/
wiki/ index. php/ FAQ#Why_ is_Zone-
Minder_using_so_much_CPU. 3F
[7] Arquitectura ARM:
http:// en. wikipedia. org/ wiki/ ARM_
architecture
intuitiva herramienta de administracin
Dolphin y delegar la naveagcin web en
Rekonq.
De momento, Kubuntu es la nica dis-
tribucin en haber puesto a Rekonq como
su navegador predeterminado. La tenden-
cia general hacia aplicaciones ms ligeras
hace que cambiar a Rekonq sea lgico,
mxime cuando tenemos en cuenta que
este frugal navegador se integra perfecta-
mente en el entorno KDE.
Ligero y Atractivo
Ya existen paquetes para Rekonq en los
repositorios de todas las distribuciones
ms importantes, y esto hace que la insta-
lacin sea muy sencilla. Al igual que Goo-
gle Chrome, Rekonq carece de una barra
de men. Las funcionalidades que van
ms all de la navegacin web, se han
movido hasta el men Herramientas, igual
que en el administrador de ficheros de
KDE, Dolphin. Podemos acceder a este
men pulsando el icono con la llave
inglesa que se encuentra a la derecha de la
barra de direcciones y bsquedas. Bajo la
barra de men, podemos habilitar una
barra de herramientas para marcas si as
lo deseamos, siendo posible habilitar o
deshabilitar la barra en el men Herra-
mientas.
Como cualquier otro navegador web a
la ltima, Rekonq soporta la navegacin
con pestaas. Si pulsamos con el botn
derecho del ratn en una pestaa, pode-
mos acceder a todas sus funcionalidades
crticas, como la funcionalidad de clona-
cin. La funcionalidad Pestaas cerradas
nos muestra una lista con todas las pesta-
as cerradas durante la sesin actual.
La pgina de inicio rpido (Favoritos) es
muy similar a su homloga en Google
Chrome y aparece por defecto cuando ini-
ciamos el navegador, ofreciendo una vista
en mosaico de nuestros sitios web favori-
tos. Para aadir una marca, pulsamos el
botn con el signo ms verde, etiquetado
en Aadir un favorito (Figura 1).
Cuando creamos una nueva baldosa,
Rekonq nos pide abrir la pgina web. De
esta manera, necesitamos introducir una
direccin en la barra de direcciones e ir
hasta dicho sitio web. Tras cargar la
pgina, podemos pulsar el botn Estable-
cer esta pgina situado en la parte supe-
rior derecha de la pgina. S, el procedi-
miento no es muy intuitivo que digamos.
Pero, dicho esto, la pgina de inicio
ofrece muchas ms tiles opciones. Bajo
Rekonq LINUX USER
61
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
E
n la comunidad Linux, Rekonq [1]
no es desconocido. Este ligero
navegador ha sido parte de
Kubuntu (Ubuntu con el escritorio KDE
[2]) desde la versin 10.10. Al igual que
Safari de Apple, Rekonq est basado en el
motor de renderizado de HTML Webkit.
Webkit es a su vez un fork derivado de
KHTML, el motor que usa Konqueror para
renderizar sitios web.
Rekonq aporta tambin una salida a la
sobrecargada Konqueror, el navegador y
administrador de ficheros de KDE 3 [3]. El
exceso de funcionalidades de Konqueror
confunda a muchos usuarios, y en parti-
cular a los principiantes. Cuando se lanz
KDE SC 4, los desarrolladores decidieron
dejar la administracin de ficheros a la
Rekonq parece ser el sustituto de
Konqueror como el navegador
web estndar en KDE. Razn sufi-
ciente para dedicarle nuestra aten-
cin.
POR VINCZE-ARON SZABO
Surfeando en KDE con Rekonq
Cambio de
Guardia
sesin con varias
pestaas abiertas,
necesitamos modifi-
car la configuracin.
Para hacerlo, vamos
a Herramientas |
Configurar rekonq
(Figura 2).
Seguridad y
Ms
Para usuarios que
no quieran dejar
pistas locales tras
ellos, Rekonq tam-
bin ofrece un
modo privado. Esto
significa que otros
usuarios del ordena-
dor no vern los
sitios que se han
visitado. Cuando
iniciamos este
modo, la aplicacin
guarda las pestaas activas y las carga de
nuevo cuando cerramos el modo privado.
A diferencia de Konqueror, Rekonq es
un navegador web puro, pero que tambin
se integra perfectamente con KDEy que
puede compartir los marcadores, cookies
y la informacin de registro con Konque-
ror. En otras palabras, ambos acceden al
mismo conjunto de datos locales, de
modo que podemos prescindir de servi-
cios online que sincronizan nuestros datos
a travs Internet. Las contraseas se
envan a KWallet
para que tengamos
acceso al mismo conjunto de datos con
ambos navegadores KDE.
Rekonq posee tambin un filtro para
banners de anuncios que nos permite
ocultar estos elementos en sitios web. A
diferencia de Firefox y Chrome, Rekonq
carga y habilita el filtro de manera inme-
diata. Podemos configurarlo accediendo a
Herramientas | Herramientas | Bloqueo de
publicidad. Rekonq obtiene la informacin
sobre los anuncios a filtrar desde Easy -
List, una lista que el plugin Adblock tam-
bin usa para Firefox y Chrome.
Rekonq usa EasyList como un filtro
automtico que actualiza una vez a la
semana de forma predeterminada. Si fuera
necesario, podemos modificar este inter-
valo. Adicionalmente, tenemos la opcin
de definir nuestros propios filtros en Fil-
tros manuales.
Bien Integrado
Un administrador de marcadores es algo
estndar para cualquier navegador web
que se precie. Rekonq posee tambin esta
funcionalidad, aunque se encuentre un
tanto oculta y no disponible a travs de un
men. Podemos acceder a la funcin de
administracin desde la pantalla de inicio
pulsando la opcin Marcadores. Para edi-
tar las entradas, pulsamos Editar los mar-
cadores, que se encuentra situado en lado
superior derecho de la ventana.
El editor que arranca es el mismo
mdulo que en Konqueror, por lo que
todos los cambios que realizamos tambin
la lnea de pestaas, podemos seleccionar
los sitios que deseamos ver en nuestra
pgina de inicio rpido. Adems de los
favoritos, puedes escoger ventanas cerra-
das, marcadores, historial, descargas y
pestaas abiertas en la sesin actual.
Escoger una vista u otra es tan sencillo
como pulsar en el icono apropiado.
Dependiendo del contexto, esto nos per-
mite un acceso ms rpido a funcionalida-
des tales como el borrado del historial.
Si deseamos que nuestra pgina de ini-
cio cuando iniciamos el navegador sea
una pgina especfica o nuestra ltima
LINUX USER Rekonq
62
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 2: Un navegador ligero con muchas campanas y pitos adems
de las configuraciones generales. Tambin podemos configurar atajos
de teclado y nuestra eleccin de motores de bsqueda.
Figura 3: Rekonq se integra perfectamente en el escritorio KDE. El
visualizador de PDF se basa en Okular.
Figura 1: Podemos acceder a nuestros sitios webs favoritos directa-
mente despus del arranque pulsando en una de las baldosas.
estn disponibles all. Independiente-
mente de esto, encontraremos que el edi-
tor de marcadores ofrece un juego com-
pleto de funcionalidades para la adminis-
tracin, incluso de cantidades enormes de
marcadores.
A pesar de que Rekonq no soporta plu-
gins que nos permitan expandir sus fun-
cionalidades como tienen los navegadores
Firefox o Chrome, integra varias herra-
mientas para facilitar la vida diaria del
internauta. Para leer PDFs directamente en
el navegador, Rekonq integra el visor de
PDFs Okular. Si pulsamos en un fichero
PDF mientras navegamos la web, se nos
preguntar si deseamos abrir el fichero o
guardarlo. Si seleccionamos Abrir, Rekonq
nos muestra el PDF directamente en la
ventana del navegador gracias a Okular
(Figura 3).
El principio de no reinventar la rueda y
hacer el mejor uso del entorno existente es
algo que Rekonq aplica tambin a los
feeds RRS, para los cuales utiliza el lector
de noticias Akregator para permitir a los
usuarios subscribirse a feeds. Esto signi-
fica que podemos mantenernos al da con
lo ltimo de nuestros sitios favoritos. Para
subscribirnos, simplemente pulsamos el
icono RSS situado a la derecha de la barra
de direcciones. El icono slo aparece si el
sitio web tiene de hecho un feed al que
podamos subscribirnos.
Cuando pulsamos sobre el icono, apa-
rece un pequeo dilogo y podemos selec-
cionar uno de los feeds RSS disponibles
desde el sitio web. Si tenemos una cuenta
Google, tambin podemos optar por Goo-
gle Reader para aadir feeds RSS.
La previsualizacin de impresin es una
herramienta pequea pero impresionante
a la que podemos acceder a travs de la
funcin de impresin. Se nos conduce
hasta un atractivo dilogo que nos mues-
tra una previsualizacin de cmo quedar
una copia impresa (Figura 4).
Opciones
Como he mencionado previamente,
Rekonq tiene un dilogo Configurar
rekonq que ofrece distintas opciones de
configuracin. General, pestaas y Apa-
riencia contienen opciones generales para
el navegador. Podemos ajustar el compor-
tamiento del navegador en WebKit, ponga-
mos, deshabilitando Java, Javascript, y la
carga de imgenes automtica, pulsando
el icono WebKit. El panel Avanzado nos
lleva a opciones de configuracin del
proxy, los gestos
del ratn y del
corrector ortogr-
fico.
Tambin pode-
mos hacer que
nuestra experiencia
web diaria sea ms
fcil con el navega-
dor Rekonq visi-
tando las secciones
Atajos y Motores de
bsqueda. Atajos
nos permite definir
atajos de teclado
para cualquier fun-
cionalidad de
Rekonq de manera
que podamos eje-
cutarla directa y
rpidamente. Las
opciones de los
motores de bs-
queda nos permi-
ten definir atajos
de teclado para
acceso rpido y
buscar en motores
de bsqueda espe-
cficos.
Podemos llamar
a cualquier motor
de bsqueda que
habilitamos en este
dilogo introdu-
ciendo un atajo de
teclado seguido de
parntesis y una
clave de bsqueda.
Por ejemplo, si
deseamos buscar
Linux en Google,
slo necesitamos
introducir lo siguiente en la barra de direc-
ciones de Rekonq: gg:Linux. Adems de
esto, la lnea de entrada reacciona al texto
que hemos introducido con una funciona-
lidad de autocompletado (Figura 5).
Conclusin
Si KDE es nuestro escritorio Linux prefe-
rido, Rekonq nos proporciona un navega-
dor ligero a la ltima con todas las funcio-
nalidades que necesitamos. La integracin
con KDE y el uso de mdulos comparti-
dos, como el editor de marcadores, mues-
tran que los desarrolladores han imple-
mentado la aplicacin de manera ponde-
rada, en vez de ir a la suya y reinventar la
rueda. El navegador tambin puede rende-
rizar contenido Flash y, gracias al motor
WebKit, est perfectamente preparado
para el futuro.
Lo que realmente necesita Rekonq ahora
es implementar la opcin para la integra-
cin de plugins para que Rekonq asuma el
papel de navegador estndar de KDE.
Rekonq LINUX USER
63
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 4: La previsualizacin de impresin nos muestra la apariencia
de una copia en papel de la pgina actual.
Figura 5: Rekonq viene con un autocompletado con una seleccin
dinmica de candidatos objetivo.
[1] Rekonq: http:// rekonq. kde. org
[2] Rekonq En Kubuntu 10.10
http:// mail. kde. org/ pipermail/
rekonq/ 2010-May/ 001359. html
[3] Konqueror:
http:// www. konqueror. org
RECURSOS
L
a herramienta de diseo de
bases de datos Glom [1] puede
ayudarnos a construir bases de
datos simples y relativamente comple-
jas con suma facilidad, incluso si
nuestras habilidades para el desarrollo
de bases de datos son escasas. Glom
ofrece la mayora de las funcionalida-
des que podramos esperar de una
aplicacin profesional y adems, nos
oculta toda la complejidad detrs de
una interfaz fcil de usar. De hecho,
Glom usa como back-end al todo pode-
roso gestor de base de datos
PostgreSQL, aunque la aplicacin evita
a los usuarios su complejidad, permi-
tiendo construir soluciones de bases
de datos simples o de varios usuarios,
sin tener que aprender todas las com-
plejidades del modelo objeto relacio-
nal o sin necesitar saber cmo cons-
truir consultas de SQL. Resumiendo, si
estis buscando una herramienta que
pueda ayudar a preparar una base de
datos de escritorio con el mnimo
esfuerzo, Glom es vuestra aplicacin.
Instalar Glom
El primer paso es instalar Glom en
nuestra mquina. Algunas distribucio-
nes de Linux (p.ej., Ubuntu) tienen
Glom en sus repositorios de software
oficiales, as que podemos instalar la
aplicacin usando el gestor de paque-
tes.
La pgina web del proyecto ofrece
los paquetes binarios de la versin
ms reciente de Glom para varias dis-
tribuciones populares de Linux. Si uti-
lizis Ubuntu, os gustar saber que la
ltima versin de Glom est disponible
a travs del PPA Openismus [2] y que
se puede instalar de esta forma:
sudo apt-add-repository U
ppa:openismus-team/ppa
sudo apt-get update
sudo apt-get install U
glom
Si queremos probar la versin ms
reciente de Glom, aunque sea inestable,
podemos utilizar el PPA ppa:openis-
mus-team/openismus-glom-unstable.
Hay que tener en cuenta que las bases
de datos creadas con las versiones ines-
tables no pueden ser abiertas con la
versin estable de Glom.
Otra opcin sera compilar Glom
desde el cdigo fuente. El sitio web del
proyecto proporciona una lista de las
dependencias necesitadas y notas
sobre la configuracin inicial de
PostgreSQL.
Construyendo una base de
datos en Glom
Glom viene con un puado de ejem-
plos de bases de datos que proporcio-
nan algunas indicaciones tiles. Aun-
que para enfrentarnos con los concep-
LINUX USER Workspace: DAM con Glom
64
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Las bases de datos de escritorio son perfectas para mantener pestaas
con varios tipos de datos desde enlaces y fragmentos de texto hasta
tareas y facturas pero construir bases de datos desde cero puede ser
algo desalentador, a menos que podamos usar Glom.
POR DMITRI POPOV
Construir una solucin simple de recursos digitales con
Glom
Glorioso Glom
Dmitri Popov ha estado escribien -
do exclusivamente sobre Linux y
software de cdigo abierto
durante aos. Sus artculos han
aparecido en revistas y sitios web
daneses, britnicos, norteameri-
canos, alemanes y rusos. Es un
vido aficionado a la fotografa y
escribe sobre herra mientas de
cdigo abierto para la fotografa
en su blog scribblesandsnaps.
wordpress.com.
E
L

A
U
T
O
R


tos bsicos de la aplica-
cin, quizs lo mejor sea
construir una base de
datos desde cero. Para
este ejercicio, construire-
mos una base de datos
muy simple para organi-
zar las fotografas,
pudiendo utilizarse como
una solucin de bajo
coste para la gestin digi-
tal.
Para comenzar, hay que
iniciar Glom, cambiar a
la seccin de New Docu-
ment en la pantalla de
bienvenida, seleccionar
New Empty Document y presionar el
botn Select. Daremos un nombre a la
base de datos y la guardaremos en el
directorio deseado. A continuacin,
Glom nos indicar que hay que crear
tablas para la base de datos. Se necesi-
tan al menos dos tablas: una para
almacenar las fotografas con su infor-
macin (ttulo, descripcin, metadatos
Exif, etc.) y otra para almacenar las
etiquetas asignadas a cada fotografa.
Por lo tanto, crearemos esas dos
tablas, con los nombres de Tags y Pho-
tos y marcaremos esta ltima por
defecto (Figura 1) para que la
siguiente vez que ejecutemos Glom se
nos abra automticamente la tabla
Photos.
A continuacin, seleccionaremos la
tabla Photos y pulsaremos el botn
Open. Esto abrir la tabla en el modo
Operator, permitindonos introducir
datos y manipular los registros. Para
editar las tablas, aadir campos, crear
relaciones y ejecutar otras tareas de
mantenimiento de bases de datos,
tenemos que cambiar al modo Develo-
per seleccionando Developer | Develo-
per Mode.
El siguiente paso ser
rellenar las tablas creadas
con campos. Comenzando
con la tabla Photos, selec-
cionaremos Developer |
Fields y removeremos
todos los campos por
defecto, excepto los cam-
pos marcados como pri-
mary key. A continuacin,
aadiremos campos tal y
como se muestra en la
Figura 2. Para cambiar las
opciones de cada campo, lo
seleccionamos y pulsare-
mos en Open. En la ven-
tana Field Definition
(Figura 3) podemos modifi-
car varias opciones, inclu-
yendo el valor y formato de
cada campo, tal y como se
ve en las opciones Text For-
matting y Choices.
Esto ltimo puede venir muy bien si
queremos limitar la entrada de datos a
una seleccin de elementos. Por ejem-
plo, podemos limitar los valores del
campo Wiki Commons a dos opciones:
Pending (cuando la foto especfica no
ha sido subida a Wiki Commons) y
Submitted (la foto ha sido subida a
Wiki Commons). Para realizar esto,
cambiaremos las opciones de Default
Formatting | Choices, activando la
opcin Custom Choice List y aa-
Workspace: DAM con Golm LINUX USER
65
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 1: Creando las tablas de la base de
datos.
Figura 2: Rellenando la tabla Photos con campos.
Figura 3: Especificando una lista de opciones personali-
zada.
Figura 4: Campos en la tabla Tag. Figura 5: Definiendo una relacin.
5. Marcaremos las casillas de verifica-
cin Allow Editing y Automatic Crea-
tion, permitiendo as modificar las
entradas existentes en la tabla Tags y
el poder aadir nuevas con la relacin
especificada.
Con estos pasos bsicos de la estruc-
tura de la base de datos, ya podemos
empezar a trabajar en los casos parti-
culares. Por cada tabla en la base de
datos, Glom nos proporciona dos vis-
tas: List y Details. La vista List muestra
todos los registros en la tabla actual en
forma de lista. Cuando definimos cam-
pos en una tabla, Glom automtica-
mente aade algunos de ellos a la vista
List, aunque podemos modificar fcil-
mente la lista por defecto para adap-
tarla a nuestras necesidades. Para ello,
debemos seleccionar Developer |
Layout para abrir la ventana Layout,
quitando los campos que no necesita-
mos y aadiendo los campos deseados
utilizando el botn Add Field.
Por cada campo, podemos especifi-
car un ttulo y un tamao usando la
columna apropiada (Figura 6). Para
cambiar el formato de texto por
defecto de un campo en concreto, lo
seleccionaremos y presionaremos el
botn Formatting. En la ventana Field
Layout, podemos especificar la alinea-
cin del texto, fuente y colores fronta-
les y de fondo. Presionaremos OK para
guardar estas opciones de formato per-
sonalizadas. Una vez que hayamos
configurado la vista de la lista, presio-
naremos Close para guardar los cam-
bios y cerrar la ventana.
La vista Details presenta el registro
actual como una tarjeta, pudiendo
modificar la vista de diseo por
defecto desde Developer | Layout. Uti-
lizando las opciones en la ventana
Layout, podemos organizar los campos
aadidos en grupos (cada grupo se
muestra como una seccin en la vista
Details, Figura 7). Por cada grupo,
diendo los elementos deseados, mar-
cando la casilla de verificacin Restrict
data to these choices y pulsando en
Save. Una vez que hemos rellenado la
tabla Photos con campos, pulsaremos
Close, cambiando a la tabla Tags selec-
cionando Tables | Tags y aadiremos
campos tal y como se muestra en la
Figura 4.
Todas las etiquetas asignadas a una
fotografa en la tabla Photos son alma-
cenadas en una tabla separada de eti-
quetas, por lo que tenemos que enla-
zar las tablas definiendo una relacin.
En este caso, necesitamos crear una
relacin a travs del campo id con
clave primaria (que acta como el
identificador nico de cada fotografa)
de la tabla Photos y el campo photo_id
en la tabla Tags. Para hacer esto, cam-
biaremos a la tabla Photos, seleccio-
nando Developer | Relationships for
this Table y especificando una nueva
relacin tal y como se ve en la Figura
LINUX USER Workspace: DAM con Glom
66
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 6: Editando el diseo de la vista de Lista.
Figura 8: Trabajando en la vista Details. Figura 9: Configurando la vista del portal.
Figura 7: La vista Details.
67
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
podemos especificar un nmero de
columnas. Por ejemplo, si establece-
mos un nmero de columna a un
grupo en concreto (a 1), cada campo
en este grupo ser ubicado en una
lnea separada en la vista Details. Con-
figurando el nmero de columnas a 2,
mostrar los campos del grupo en dos
columnas (Figura 8).
Utilizaremos el botn Add Field para
rellenar la vista con los campos de la
tabla actual. Adems, la ventana
Layout tambin tiene el botn Add
Related Records para aadir registros
que muestren una tabla editable, con-
teniendo los registros que coincidan
con otra tabla a travs de la relacin
existente.
En este caso, podemos usar ese
botn para aadir un portal que nos
muestre etiquetas de la tabla Tags para
las fotografas de la tabla Photos. Des-
pus de aadir el portal, pulsaremos el
botn Edit, seleccionaremos la rela-
cin de etiquetas y pulsaremos Select.
El portal aadido normalmente
necesitar configuracin adicional, as
que tendremos que cerrar la ventana
Layout, pulsar el botn derecho del
ratn en el portal en la vista Details y
seleccionar Layout. Esto abrir una
ventana donde podremos modificar el
portal. Aqu, podremos especificar el
tamao del portal, as como aadir los
campos deseados y configurar otras
opciones (Figura 9).
Adems de las vistas List y Details,
Glom tambin proporciona herramien-
tas fciles de usar para crear y generar
informes. Podemos usar la funcionali-
dad de informes de Glom para generar
una lista de todas las fotografas en la
base de datos, seleccionando Develo-
per | Reports y presionando el botn
Add para crear un nuevo informe, dn-
dole adems un nombre. A continua-
cin, pulsaremos Open para abrir la
ventana de Report. Crear un informe es
tan fcil como rellenar sus secciones
con campos y elementos estticos,
como imgenes y textos. Para aadir
un campo al cuerpo del informe, hare-
mos clic en la pestaa Main en la sec-
cin Parts, seleccionando Field en el
panel de Available Parts y presionando
el botn Add (Figura 10).
Para continuar, seleccionaremos el
campo aadido en la seccin Parts,
presionaremos Edit, seleccionando los
campos que queramos y pulsando
Select. Para modificar el formato por
defecto del campo, utilizaremos el
botn Formatting. De una forma simi-
lar, podemos aadir otros tipos de
campos y elementos estticos. Cuando
finalicemos, pulsaremos Close. Para
generar un informe basado en el que
acabamos de crear, elegiremos el
informe desde el men Reports. Esto
lo generar y lo abrir en el navegador
por defecto del sistema.
La funcionalidad de impresin de
Glom puede venir muy bien cuando
necesitemos imprimir el registro actual.
Crear una vista de impresin no es par-
ticularmente difcil. Hay que seleccio-
nar Developer | Print Layouts, crear una
nueva vista y usar el editor para relle-
narla con campos y elementos estti-
cos. Una vez que la vista est prepa-
rada, aparecer debajo de File | Print.
Una vez que hemos hecho todo el
trabajo en la base de datos, podemos
empezar a utilizarla. Pero antes de
esto, deberamos crear una copia de
seguridad de la base de datos por si
algo fuera mal. Seleccionando Develo-
per | Export Backup, Glom crear una
copia de seguridad conteniendo todos
los bits importantes. Podemos restau-
rar la base de datos desde el fichero
generado utilizando el comando Deve-
loper | Restore Backup.
Aunque Glom es una aplicacin de
escritorio, puede actuar tambin como
un servidor de base de datos, algo que
es realmente interesante para entornos
con varios usuarios. Para compartir la
base de datos actual con otros usua-
rios en la red local, hay que asegurarse
de que Glom se est ejecutando en el
modo Developer y adems, habra que
seleccionar File | Share on Network. Se
nos indicar que aadamos un usuario
y, una vez hecho esto, Glom comen-
zar a servir la base de datos. Otros
usuarios podrn acceder a esa base de
datos compartida desde sus mquinas
ejecutando instancias de Glom.
Conclusin
La solucin creada de gestin de con-
tenidos digitales es mantenida por
una base de datos relativamente sen-
cilla, con slo dos tablas y una rela-
cin simple. Por lo tanto, solamente
toma una pequea ventaja de toda la
funcionalidad de Glom. Usando las
caractersticas y herramientas de la
aplicacin, podemos construir solu-
ciones avanzadas de bases de datos
para gestionar cualquier tipo de datos
que tengamos.
Workspace: DAM con Golm LINUX USER
[1] Glom:
http:// www. glom. org/
[2] Openismus PPA:
https:// launchpad. net/
~openismus-team/ +archive/ ppa
RECURSOS
Figura 10: Creando un informe.
L
os cronogramas siempre han sido
populares en libros y revistas, y
no son menos en Internet. En las
lecciones de historia, muestran de un
vistazo cundo ocurrieron los aconteci-
mientos. Los entusiastas de Linux pue-
den rastrear las fechas de lanzamiento
de sus distribuciones favoritas, los plani-
ficadores del proyecto los utilizan para
definir sus metas e incluso Facebook los
utiliza ahora para trazar tu vida. Un
pequeo programa llamado Timeline te
permite crear rpi-
damente tus propios
cronogramas.
Alimentando
la Python
Para instalar Time-
line, primero lanza
tu gestor de paque-
tes. Despus de hacerlo, asegrate de que
tienes la versin de Python 2.5 o poste-
rior. Despus, es necesario descargar las
bibliotecas wxPython versin 2.8.9.2 o
posterior, gettext versin 0.17 o posterior
y el programa SCons. Para los usuarios de
Ubuntu y openSUSE, esto significa la ins-
talacin de los paquetes listados en la
Tabla 1. El siguiente paso es visitar la
web de Timeline [1], ve a la seccin Get-
ting Timeline y coge el archivo bajo la
cabecera Installing on other systems (ins-
LINUX USER Timeline
68
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Estar la conferencia terminada a tiempo? Qu tareas debe completar y en qu orden? Naci Jean antes
que Derek? El Atari ST sali despus del Amiga? Timeline es un programa que con tan slo un vistazo, te
puede dar una respuesta rpida a este tipo de preguntas. POR TIM SCHRMANN
Gestin de tareas y eventos con Timeline
En la Lnea
Tabla 1: Paquetes Necesarios
Ubuntu openSUSE
python
python-wxgtk2.8 python-wxWidgets
wx2.8-i18n
scons scons
gettext gettext-runtime
talling from source). Des-
comprime el archivo en tu
disco, aparecer una ven-
tana de terminal, cambia
al directorio creado en el
paso anterior timeline-
ver.si.on. A continuacin,
teclea scons mo para insta-
lar las traducciones. Por
ltimo, para lanzar Time-
line, teclea
python timeline.py
y ahora ya lo tienes todo:
listo para la accin.
Navegador
Timeline viene con una ventana bastante
espartana que ofrece abrir un tutorial.
Acepta la sugerencia haciendo clic en el
enlace y se te mostrar el cronograma de
prueba de la figura 1. Si no puedes ver
las lneas verticales, es necesario hacer
la ventana un poco ms grande. Al pasar
sobre uno de los eventos, podrs ver su
descripcin en una pequea ventana de
globo. Si deseas ver la descripcin per-
manentemente, haz clic en el botn de la
esquina superior derecha del globo.
Para mover el cronograma, haz clic
izquierdo en un rea libre (en blanco) y
arrastra el ratn hacia la izquierda o la
derecha. El control deslizante de la parte
derecha de la ventana te permite empujar
el cronograma al completo hacia arriba o
hacia abajo. En el men Navegar puedes
seleccionar que el perodo de tiempo a
visualizar sea relativo o absoluto.
Cada evento puede ser asignado a una
categora. El cronograma de prueba
incluye cuatro, que se enumeran en el
panel izquierdo de la ventana. Si no
seleccionas una de las categoras, Time-
line esconde todos los eventos que perte-
necen a esa categora y los elimina de la
leyenda, haciendo que los cronogramas
complejos sean ms fciles de entender.
Cada categora tiene su propio color, que
Timeline utiliza para pintar todos los
eventos asociados. En otras palabras,
puedes ver inmediatamente que el
evento Welcome to Timeline pertenece a
la categora Welcome, coloreada de rojo
en el tutorial.
Haciendo historia
Para crear un nuevo cronograma, selec-
ciona File | New | File Timeline. En la
ventana que aparece es necesario especi-
ficar una carpeta, luego asigna un nom-
bre de archivo y haz clic en Save. Time-
line guarda automticamente todos los
cambios y, cuando se lanza, siempre se
abre el ltimo cronograma editado.
Es buena idea crear un par de catego-
ras antes de introducir un nuevo evento
en el cronograma vaco. Para esto, selec-
ciona Timeline | Edit Categories y des-
pus Add. Escribe un nombre para la
nueva categora y selecciona el fondo y
color de la fuente para los eventos. Al
hacer clic en uno de los colores, se abre
un selector de color. Sigue los mismos
pasos para crear cualquier otra categora
que necesites (Figura 2). Por cierto, pue-
des anidar categoras. Para ello, selec-
ciona la categora padre en el men des-
plegable Parent en el cuadro de dilogo
Add Category. Esta jerarqua est repre-
sentada por guiones en el cuadro de di-
logo Editar categoras.
De vuelta a la ventana
principal, puedes crear nue-
vos eventos. Para ello, basta
con hacer clic en alguna
parte del cronograma o
seleccionar Timeline | Create
Event. En la ventana que
aparece (Figura 3), primero
introduce la fecha del evento
en When. Para simplificar
esta tarea tienes disponible
un pequeo calendario a la
derecha del campo de
entrada, solamente haz clic
en el calendario para usarlo.
Timeline utiliza el formato
de fecha ao-mes-da, aun-
que slo el mes y el da son
obligatorios. Por ejemplo, si slo sabes
que tu ta Berta naci en mayo de 1995,
tendrs que inventar un da, ya que
Timeline no aceptar 1955-05. Si el
nuevo evento ocupa ms de un da,
como una conferencia de tres das,
marca la casilla Period y escribe la fecha
final en el nuevo campo. Si la hora del
da es importante, se puede comprobar
Timeline LINUX USER
69
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 2: Cada categora tiene su propio
color.
Figura 3: El Amiga 1000 fue presentado al pblico el 23 de
junio de 1985.
Figura 1: El tutorial de Timeline muestra todas las funciones principales del programa, con una lnea roja que
marca la fecha actual.
Para evitar el minucioso proceso de
crear eventos uno por uno, puedes abrir
un calendario ya elaborado en el formato
iCalendar con la extensin .ics. Despus
se puede abrir el archivo .ics en Timeline
haciendo clic en File | Open.
Viaje en el tiempo
Una vez que hayas comenzado un crono-
grama (Figura 4), puedes modificar
directamente los eventos existentes. Para
ello, haz clic en las pequeas cajas
negras que aparecen en los bordes
izquierdo y derecho del evento que quie-
ras modificar. Puedes utilizar estas asas
para que el evento sea ms largo o ms
corto. Ten en cuenta que esto tambin
influir en el inicio y finali-
zacin del evento. El tira-
dor negro central permite
mover el evento a otro
punto en el tiempo. Si este
mtodo es demasiado
impreciso, haz clic en el
evento y selecciona Edit.
Por cierto, este men con-
textual tambin contiene
un elemento Delete, pero
tambin se puede pulsar la
tecla Suprimir para borrar
los eventos seleccionados.
Si mantienes presionada la
tecla Control y seleccionas
dos eventos, puedes selec-
cionar Timeline | Measure
Distance between two
Events para medir el
tiempo que los separa
(Figura 5). sta es una
forma rpida para saber
que tan slo tienes 37 das
entre el cumpleaos de la
ta Berta y el to Eloy para
comprar otro regalo de
cumpleaos. Puedes
exportar un cronograma
completo como un grfico
vectorial SVG o un archivo
de imagen PNG. Las fun-
ciones para hacer esto
estn localizadas en el
men File.
Conclusiones
Los cronogramas son
mucho ms fciles de leer
que un calendario impreso
y si tienes un historial de
tus propias citas en un cro-
nograma, puedes comprobar de un nico
vistazo el orden en el que tienes que
hacer las tareas. Timeline puede incluso
decirte el nmero de das entre estas
tareas y por tanto calcular la duracin
del proyecto. Aunque Timeline es un
programa bastante sencillo y que no
ofrece muchas ms caractersticas, en
muchas situaciones da una visin gene-
ral mucho mejor que un simple calenda-
rio.
el Show time para mostrar los campos de
entrada correspondientes.
En el campo Text, escribe una etiqueta
para el evento que se mostrar en el cro-
nograma. A continuacin, selecciona la
categora adecuada y, por ltimo, aade
una descripcin. Por cierto, Timeline no
te obliga a elegir una categora. Los
eventos sin categora se muestran en el
cronograma con casillas grises. Adems,
puedes ir a la pestaa Icon para seleccio-
nar un icono para el evento. Si deseas
crear mltiples eventos secuencialmente,
marca la casilla Add more events after
this one y Timeline abrir inmediata-
mente un nuevo formulario vaco al pul-
sar Ok.
LINUX USER Timeline
70
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
[1] Timeline:
http:// thetimelineproj. sourceforge.
net/
RECURSOS
Figura 4: Las lneas de tiempo revelan todo tipo de resultados interesantes: por ejemplo, el primer Macintosh
de Apple fue lanzado aos antes del Amiga y el Atari ST. Apple lanz una nueva versin del Apple II un par de
aos ms tarde.
Figura 5: El cronograma revela que las fechas de lanzamiento entre el Commodore 64 y el Amiga 1000 estn
separadas por slo 1269 das.
ventaja en comparacin con las aplica-
ciones para bibliotecas ms grandes: no
necesitas una base de datos en segundo
plano. Esto hace que la instalacin y la
operacin del sistema sea, de hecho,
mucho ms fcil, ya que se puede insta-
lar y hacer funcionar el software en un
par de minutos.
Instalando
Alexandria se encuentra disponible en
los repositorios de la mayora de las dis-
tribuciones ms importantes, por lo que
la instalacin es la tpica historia de
apuntar y pulsar. Debido a que el soft-
ware tiene que resolver muchas depen-
dencias, debes utilizar YaST, Synaptic o
una herramienta similar para completar
los pasos necesarios de forma autom-
tica.
Si no puedes encontrar Alexandria en
tu gestor de paquetes, usa la lnea de
comandos para agregar el PPA del
equipo de Alexandria [2]:
sudo add-apt-repository U
ppa:alexandria-team/ppa
sudo apt-get update
Ahora el paquete Alexandria se mos-
trar en el gestor de tu eleccin (en
Synaptic tendrs que ir a Edit | Reload
Package Information). Despus de la
instalacin, tendrs que buscar el pro-
grama en tu escritorio Gnome 2 en
Applications | Office programs | Alexan-
dria book collection manager o puedes
iniciarlo desde un terminal con Alexan-
dria. La primera vez que lo inicias, la
aplicacin presenta una interfaz espar-
tana dividida en tres paneles.
En la parte superior de la ventana
aparece el tpico men, bajo el cual hay
una barra de men con el icono de
papel con un smbolo ms, cuadros des-
plegables y un cuadro de entrada. En la
parte izquierda de la ventana, el panel
Libraries enumera las bibliotecas exis-
tentes y diversos grupos por el estatus
de los libros. Por ltimo, en la ventana
grande, se muestran los libros registra-
dos (Figura 1).
Bibliotecas
Las bibliotecas permiten a los usuarios
organizar sus colecciones por temas.
Para crear una nueva biblioteca, puedes
hacer clic en el icono del documento o
seleccionar Library | New library. Esto
Alexandria LINUX USER
71
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Linux y a un pequeo programa lla-
mado Alexandria [1], puedes, rpida y
fcilmente, poner orden en tu coleccin.
El programa tambin es adecuado para
la gestin de colecciones en bibliotecas
pequeas, ya que permite la entrada de
las novedades con un escner de cdigo
de barras y tambin tiene una funcin
de prstamo. Adems de toda estas fun-
cionalidades, Alexandria tiene una gran
Puedes perder la pista de tus libros a medida que crece tu coleccin.
Alexandria te permite catalogarlos rpida y fcilmente sin la necesidad
de utilizar un molesto servidor de base de datos.
POR ERIK BRWALDT
H
asta el momento, ni los medios
modernos, ni los libros electr-
nicos en Internet, han sido
capaces de expulsar del mercado el
libro impreso. Pero, los biblifilos, a lo
largo del tiempo, tienden a perder la
pista de sus colecciones en constante
crecimiento y esto hace que sea una
buena idea el uso de un sistema electr-
nico de control de archivo. Gracias a
Gestiona tu coleccin de libros con el gestor de
coleccio nes Alejandra
El Bibliotecario
Debido a que el paquete ruby-gnome2 que viene con Ubuntu 11.10 ha cambiado, Ale-
xandria an no funciona en esta plataforma. Los desarrolladores estn trabajando en
una solucin para este problema.
No es para Ubuntu 11.10
les de acceso en
Alexandria para
cada biblioteca a
que desees acceder.
El software lista
una serie de servi-
dores para bibliote-
cas individuales,
aunque puede que
no aparezcan tus
favoritas: algunas
bibliotecas slo son
compatibles con
bsquedas web
basadas en navega-
dor y no permiten
las credenciales de
acceso para siste-
mas de informacin a travs de cual-
quier otra interfaz.
Si tu biblioteca preferida se encuentra
en este caso, primero tienes que averi-
guar por donde se puede acceder al ser-
vidor y obtener las credenciales seguras
antes de introducirlas en Alexandria [3]
[4]. Para ello, hay que ir a Edit | Prefe-
rences y hacer clic en la pestaa Provi-
ders para abrir una lista de los provee-
dores de Z39.50 habilitados actual-
mente en Alexandria.
Para agregar un nuevo servidor de
bases de datos o modificar un servidor
existente, marca la casilla Custom
Z39.50 Providers en la parte inferior de
la ventana de Proveedores. A continua-
cin, pulsa el botn de configuracin y
teclea tus credenciales de acceso en el
cuadro de dilogo Nuevo Proveedor
(Figura 2).
Al introducir las credenciales de
acceso, asegrate de seleccionar la
Record syntax correcta, ya que vara
segn la biblioteca. Alexandria slo es
compatible con los tres formatos ms
comunes, por lo que puede que no sea
capaz de acceder al servidor de tu
biblioteca favorita. Si un catlogo es
compatible, a nivel de estructura de
datos, tanto con UNIMARC como con
USMARC, debes utilizar USMARC en tu
configuracin, ya que proporciona ms
informacin.
Al finalizar la entrada de datos, ase-
grate de mover el nuevo proveedor a la
parte superior de la lista pulsando el
botn Up, porque el programa recorre la
lista de arriba hacia abajo cuando se
realiza la consulta de un libro. Si se
mantiene la configuracin predetermi-
nada, la fuente preferida estara en la
parte inferior de la lista.
Introduccin de Libros
Tras superar con xito la adicin de las
credenciales de acceso para tus fuentes
preferidas, se puede empezar a introdu-
cir tu coleccin de libros. Para ello, en
primer lugar hay que permitir la entrada
deseada en el panel Bibliotecas, a conti-
nuacin, haz clic en el icono del signo
ms.
En el nuevo cuadro de dilogo Aadir
un libro, escribe el nmero ISBN del
libro que deseas introducir. ste est
normalmente en la cubierta posterior
del libro y siempre en la pgina de dere-
chos de autor. Cuando pulses Add, el
software abre una conexin con los ser-
vidores de bases de datos e intenta
recuperar datos como el ttulo, el autor,
la editorial y el ao de publicacin.
Si Alexandria es capaz de encontrar el
libro, muestra el icono correspondiente
en la parte izquierda de la ventana. Si
deseas agregar a tu coleccin varios
libros de esta manera, es necesario mar-
car la casilla Keep Dialog Open after
Adding Book. As Alexandria te permite
agregar tantas entradas como desees sin
tener que reiniciar continuamente el
dilogo.
En particular en los libros antiguos no
hay un nmero de ISBN, por lo que no
sers capaz de encontrarlos en Alexan-
dria mediante la bsqueda ISBN estn-
dar. En lugar de escribir cuidadosa-
mente los datos pertinentes, Alexandria
te ofrece una forma alternativa de bus-
car en las bases de datos en lnea: por
ttulo, autor o palabra clave.
Para ello, activa el botn de opcin
Search en el cuadro de dilogo Agregar
un libro y luego, selecciona el tipo de
bsqueda en el men desplegable de la
derecha. A continuacin, escribe la
palabra o frase de bsqueda que desees
en el cuadro de entrada y haz clic en
Find para comenzar la bsqueda en
lnea. La rapidez de la bsqueda variar
dependiendo del nmero de apariciones
que se produzcan en los registros de la
biblioteca para la palabra clave solici-
tada.
Alexandria lista todas las entradas
que coinciden con el filtro de bsqueda.
Dentro de esta lista, que se puede reco-
rrer a travs de los ttulos y asu-
miendo que contiene la entrada que
crea una nueva entrada Unknown en la
lista de bibliotecas. A continuacin,
puedes utilizar el recuadro de entrada
para modificar el nombre y pulsar Enter
para guardar los cambios.
Para evitar tener que introducir
manualmente cada libro con todos sus
datos, puedes acceder a los catlogos en
lnea de algunas grandes bibliotecas e
identificar la obra haciendo referencia a
su nmero ISBN. Alexandria es compa-
tible con el protocolo cliente-servidor
Z39.50, que fue el protocolo estndar
para bases de datos de bibliotecas
durante muchos aos, a pesar de que
est siendo progresivamente sustituido
por la Bsqueda/ Recuperacin a travs
de URL (SRU).
Para ver los registros de la biblioteca,
es necesario almacenar las bases de
datos y las correspondientes credencia-
LINUX USER Alexandria
72
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 1: La ventana principal se ve limpia y ordenada, mostrando
aqu dos entradas de libros.
Figura 2: Un dilogo directo te permite
aadir nuevos servidores de bases de datos
en Alejandra.
ests buscando selecciona el registro y
pulsa Add para editar tu coleccin
(Figura 3).
Visualizacin
En la vista principal al pasar el puntero
sobre el icono de un libro, Alexandria
muestra distintas fuentes para el ttulo,
el subttulo, el autor y la editorial, para
acceder a los detalles ms importantes
de un vistazo. Si necesitas informacin
adicional sobre el libro, o si deseas agre-
gar tus propias notas, puedes hacer
doble clic en la portada del libro para
que aparezca un cuadro de dilogo con
las propiedades extendidas (Figura 4).
Adems, en la pestaa General, puedes
agregar los datos bibliogrficos, especi-
ficar el tipo de encuadernacin (por
ejemplo, tapa dura, cinta, perfecto,
cosido) y la puntuacin del libro.
Si le prestas el libro a alguien, puedes
introducir su nombre y la fecha del
prstamo en la pestaa Loaning, que
muestra la gente a la que has prestado
libros de un slo vistazo. La pestaa
Notes es para comentarios personales.
Indicaciones de estado
Alejandra te ofrece varias formas de
etiquetar el estado de un libro. Por
ejemplo, puedes especificar si eres el
dueo de un libro, si simplemente lo
has ledo o ambas cosas. Adems,
puede asignar etiquetas. En funcin de
las anotaciones que hayas creado, el
libro aparecer automticamente en
uno de los grupos organizados en el
lado izquierdo de la ventana principal
del programa. Se trata de bibliotecas
inteligentes que automticamente orde-
nan tu coleccin de libros sobre la base
de criterios especficos.
Si prestas libros con frecuencia y te
gustara tener una descripcin rpida de
los libros prestados actualmente, simple-
mente haz clic en la entrada de Loaning
en la lista de bibliotecas. Despus Ale-
xandria te mostrar a la derecha todos
los libros que no se encuentran actual-
mente en la biblioteca. Del mismo modo,
puedes buscar todos los libros que has
ledo, tus favoritos, o tu lista de deseos.
Bsqueda fuera de lnea
Si quieres encontrar algo en tu propia
coleccin de libros, Alexandria te ofrece
un arsenal de criterios en los que basar
una bsqueda. En la ventana principal,
puedes seleccionar
un nico criterio de
bsqueda en el cua-
dro desplegable y
escribir una cadena
en el cuadro
situado a su lado. El
programa acepta
cadenas parciales
para la bsqueda.
Por ejemplo, si
escribes el nombre
del autor que bus-
cas, o parte del
ISBN, o una o ms
etiquetas que hayas
asignado a un libro,
Alexandria te mos-
trar los resultados
en la ventana
grande. De esta
manera, puedes
mantenerte al tanto
incluso con la
coleccin ms
grande.
Conclusiones
Alexandria ofrece
una buena opcin a
los usuarios para la
gestin de los libros
en bibliotecas pri-
vadas. En el lado
positivo, el software
es rpido, tiene una
ms que amplia
coleccin de funcio-
nes de introduccin
de datos y de bs-
queda de bibliote-
cas y tiene una interfaz intuitiva.
En el lado negativo, la conexin a
bibliotecas externas puede ser dolorosa.
En muchos casos, tendrs que configu-
rar el acceso a tu biblioteca preferida
manualmente, sobre todo si slo per-
mite la bsqueda en lnea desde un
navegador web y no con el protocolo
Z39.50.
Otro problema menor con el software
es que las nuevas versiones desde la
0.6.4 han resultado ser inestables en
varias distribuciones de Linux. Por
ejemplo, en nuestro laboratorio usando
Fedora 15 y Mandriva 2010.2, la aper-
tura de la vista de propiedades del libro
bloqueaba el sistema en todos los casos.
En otras palabras, Alexandria tiene
cierto margen de mejora. Dicho esto,
Alexandria es un software que todava
merece la pena para ratones de biblio-
teca que buscan controlar y registrar
sus colecciones.
Alexandria LINUX USER
73
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
[1] Web de Alexandria:
http:// alexandria. rubyforge. org/
[2] PPA del equipo Alexandria:
https:// launchpad. net/
~alexandria-team/ ?+archive/ ppa
[3] Directorio objetivo Z39.50:
http:// irspy. indexdata. com/
[4] Otra fuente Z39.50:
http:// staff. library. mun. ca/ staff/
toolbox/ z3950hosts. htm
RECURSOS
Figura 3: Alexandria tambin encuentra obras antiguas sin ISBN.
Figura 4: El cuadro de dilogo Propiedades permite aadir notas
bibliogrficas, prstamos, as como comentarios personales.
V
im Outliner [1], un plugin para
Vim, ofrece las mismas funcionali-
dades que una herramienta de
escritorio, llevndose a cabo en su totali-
dad con atajos de teclado. Vim Outliner se
encuentra empaquetado para las principa-
les distribuciones, aunque requiere ser
configurado primero. Para comenzar,
necesitamos instalar el paquete Vim Pac-
kage Manager, que debe ser una depen-
dencia, aunque en Debian y sus derivadas
slo es un paquete recomendado.
Adems, Vim Outliner espera encontrar
un fichero .vimrc, que debemos crear,
incluso aunque ya dispongamos de un
fichero .viminfo para propsitos normales.
Tambin necesitamos aadir dos lneas,
filetype plugin indent on
syntax on
al fichero .vimrc.
A pesar de que el administrador de
paquetes es generalmente la manera ms
eficiente de instalar paquetes, es posible
que deseemos descargar la ltima versin
e instalarla para una cuenta nica [1].
Colocamos el fichero descargado en su
propio directorio y lo descomprimimos.
Cuando ejecutamos el script install.sh,
.vimrc se crea automticamente para
nosostros.
Adems, podemos editar .vimoutlinerrc
en el directorio ~/ .vim que se cre
durante la instalacin (Figura 1). En este
fichero podemos editar el esquema de
colores que utiliza Vim Outliner para cada
nivel en una lista. Las combinaciones de
colores se guardan en el directorio de colo-
res de la estructura del directorio de des-
cargas, siendo posible usar una de ellas
como modelo para crear nuestra propia
combinacin de colores.
Si necesitamos documentacin, se
puede encontrar en el directorio ./ vim/
cimoutliner/ Doc. All encontraremos
vo_cheatsheet, un resumen de los coman-
dos de Vim Outliner, adems del fichero
de ayuda, el cual podremos tambin leer
escribiendo en Vim : vo o bien en linea en
[2].
Las configuraciones y scripts de Vim
Outliner se activan solamente cuando usa-
mos Vim para editar un fichero que acaba
en .otl. Podemos comenzar a usarlo intro-
duciendo:
vim NOMBREFICHERO.otl
Pulsamos la tecla I para arrancar el modo
de insercin e inmediatamente despus, el
tabulador y empezamos a escribir. Si cam-
bia el color del texto sangrado, Vim Outli-
ner est funcionando correctamente.
Creacin y Edicin de un
Esquema
Para crear los niveles de un esquema,
cambiamos al modo de insercin de Vim.
Cuando aadimos un encabezamiento,
escribimos normalmente, usando una
nica lnea. Para aadir un sub-encabeza-
miento, iniciamos una nueva lnea y aa-
dimos una sangra, que cambiar de color
(Figura 2). Las combinaciones de color por
defecto definen hasta nueve colores, pero
debido al espacio de pantalla limitado y
los lmites de comprensin de la mayora
de la gente, probablemente tengamos que
restringirnos a tres o cuatro niveles como
mucho.
Una vez que tengamos los encabezados,
podemos introducir debajo el texto del
cuerpo. Si comenzamos una lnea con dos
puntos (:), el texto se ajustar y formatea -
LINUX USER Lnea de Comandos: Vim Outliner
74
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Si necesitamos perfilar una redac-
cin, hacer una lista o escribir
algo altamente estructurado como
un fichero CSS para un sitio web,
entonces no hay que mirar ms
all de la lnea de comandos,
especialmente si nos encontra-
mos cmodos con el editor de tex-
tos Vim. POR BRUCE BYFIELD
Vim Outliner ordena tus pensamientos
A la Orden
r automticamente si elegimos guardarlo
en otro formato. Comenzar una lnea con
un punto y coma (;) o un smbolo de
mayor que (>) corta las lneas cuando las
creamos. Ambos tipos de textos, estndar
y formateado por usuario, tienen sus pro-
pios colores, de modo que podemos distin-
guirlos.
Adems, los mrgenes se anotan para
una referencia rpida. Una lnea sin san-
grar, o una designada como cuerpo del
texto, tiene un signo menos en el margen.
Las lneas que tienen un nivel muestran
un nmero en el margen, indicando su
posicin en la jerarqua.
Para editar esquemas, Vim Outliner usa
unos cuantos comandos nicos propios.
Cuando el cursor est en cualquier parte
del encabezado, podemos subirlo un nivel
en la jerarqua de encabezados pulsando
Ctrl+D, o bajarlo pulsando Ctrl+T. Y, si
deseamos cambiar el nivel de varios enca-
bezados de una nica vez, cambiamos a
modo comando pulsando la tecla Esc y
escribimos V para arrancar el modo visual
y seleccionamos los encabezados usando
las teclas de flecha (Figura 3). Una vez
seleccionados, pulsamos < para bajarlos
o > para subirlos. Tambin podemos
seleccionar los encabezados de la misma
manera y pulsar d para borrarlos.
Desde el modo comando podemos aa-
dir unos cuantos elementos usando algu-
nos de los comandos coma-coma de Vim
(denominados as debido a su estructura
inicial Figure 4). Por ejemplo, ,,t aade
una marca de tiempo en la posicin del
cursor con el formato HH:MM:SS, mientras
que ,,d aade una marca de tiempo con el
formato AAAA-MM-DD. Una entrada ,,B
hace que el cuerpo del texto
comience con un espacio y ,,b
con dos puntos y un espacio.
Si planeamos exportar el
esquema a formato HTML,
podemos aadir ,,- para crear
una lnea de guiones para
separar informacin. Cuando
finalicemos en modo
comando, ,,w guarda nuestros
cambios y sita de nuevo Vim
Outliner en modo insertar.
Aparte de eso, Vim Outliner
utiliza generalmente coman-
dos estndar de Vim [3], tales
como dd para eliminar un
encabezado completo, o c
para copiar y p para pegar
texto seleccionado de una
posicin a otra. Sin embargo,
no debemos preocuparnos
demasiado si no sabemos
nada ms all del uso de las
teclas de flecha para mover-
nos por el fichero. Otros
comandos de Vim aadirn
eficiencia a nuestra edicin,
aunque no es estrictamente
necesario.
Trabajando con
Desplegables
Usando una herramienta de
escritorio como Navigator de
LibreOffice, podemos simplifi-
car la vista de nuestro
esquema plegando niveles.
Por ejemplo, si estamos desa -
rrollando un esquema para un
ensayo que tiene dos niveles
de encabezado, puede que
nos ayude a detectar errores
en la estructura si ocultamos
temporalmente los encabeza-
dos de segundo nivel para darnos una
perspectiva de todo lo dems. O quizs
queramos comparar dos partes de un
documento sin copiar y pegar una parte
ms al lado de la otra. En cualquier caso,
cuando hemos acabado, podemos presen-
tar los encabezados de segundo nivel de
nuevo, de modo que podamos ver todos
los detalles de la estructura.
Vim Outliner tiene exactamente la
misma funcionalidad, pero debemos crear
los sitios especficamente donde se han de
contraer los niveles. Se llama a este pro-
ceso folding (plegado). Cuando se
contrae un plegamiento, Vim lo muestra
con un signo ms en el margen (Figure 5)
y una lnea de comas tras el texto en el
nivel superior del plegamiento (el cual es
el nico que se muestra). Adems, cuando
el cursor se encuentra al comienzo de la
lnea, est posicionado al lado del margen
en vez de al inicio del texto.
Los comandos especficos de Vim Outli-
ner para plegamiento comienzan todos
con z, aparentemente porque la letra z
parece que se est plegando sobre s
misma. Dependiendo del contenido de
nuestros ficheros de configuracin, estos
comandos puede que no estn habilitados,
aunque todos deberan estarlo por defecto.
Lnea de Comandos: Vim Outliner LINUX USER
75
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Figura 3: Podemos usar el modo visual de
Vim para seleccionar mltiples lneas a edi-
tar.
Figura 2: Vim Outline asigna un color diferente a cada nivel
jerrquico y tambin a un texto normal y otro preformate-
ado.
Figura 4: Los comandos coma-coma aaden tiles elemen-
tos tales como marcas de fecha y marcas hora y divisin de
lneas a nuestro documento.
Figura 1: Una clave para trabajar con Vim Outliner es adap-
tar el fichero de configuracin en nuestras preferencias.
tar. Desde el modo
comando, podemos
introducir zfNME-
ROj, para crear el
nmero de niveles
que especificamos.
Tambin podemos
introducir :NMEROLNEAINICIAL,
NMEROLNEAFINAL para crear plega-
mientos en las lneas dentro del rango
especificado, y zf /CADENA para crear un
plegamiento en el texto a la altura de la
cadena especificada.
Tambin podemos crear plegamientos
en modo visual seleccionando lneas sin
sangre e introduciendo zf. Todos estos
mtodos toman decisiones inteligentes,
como incluir la llave de cierre (}) si el ple-
gamiento comienza con una llave de aper-
tura ({), o aadir un plegamiento existente
a uno ms grande.
Tras crear los plegamientos, en modo
comando, podemos usar zj para mover el
cursor al siguiente plegamiento o zk para
moverlo al previo. Con zm, podemos ple-
gar el perfil un nivel y con zr expandirlo
un nivel. Con zc, podemos contraer todos
los plegamientos que estn por debajo del
cursor y con zO podemos restaurar todos
los niveles.
Otra manera de trabajar con plegamien-
tos es usando el comando ,,NMERO, que
establece el nmero de plegamientos que
se encuentran abiertos en el esquema. Si el
comando es ,,0, entonces estn desplega-
dos todos sus niveles. Tambin podemos
usar ,,cb para aadir una casilla de verifi-
cacin como toque final, sustituyndolo
por ,,cx para marcar el cuadro de verifica-
cin con una X para mostrar que el nivel
est completado (Figura 6).
Por defecto, los plegamientos no se
guardan con el fichero. Para que esto ocu-
rra, introducimos :mkview, aadiendo
opcionalmente un espacio y un nmero de
revisin, y luego salimos inmediatamente.
Es posible guardar mltiples versiones,
cada una con un nmero diferente. La pr-
xima vez que abramos el fichero, :load-
view seguido del nmero de revisin res-
taurar los plegamientos creados en la
sesin anterior.
Exportar el Perfil
Adems de los cuadros de verificacin,
Vim Outliner no est ideado para uso
directo. En vez de ello trae algunos scripts
Python para convertir sus ficheros guarda-
dos con otros formatos: awk, PDF, Doc-
Book, HTML e Impress de Open/ LibreOf-
fice (formato elegido no slo por ser
abierto, sino tambin porque la vista
Outline de Impress es la mejor herra-
mienta para esquemas de toda la suite ofi-
mtica). Estos scripts se encuentran en ~/
.vim/ vimoutliner/ scripts/ cuando los insta-
lamos.
Para convertir un fichero Vim Outliner a
uno de estos formatos, ejecutamos el
script y dirigimos la salida a un nombre de
fichero con la extensin apropiada. Por
ejemplo, para exportar el fichero
outline.otl a HTML, el comando es:
otl2html.py ./outline.otl > U
outline.html
Los scripts se ejecutan sin salida, as que
la nica seal de que se han completado
es cuando la lnea de comandos nos
devuelve al prompt. Si abrimos el fichero
exportado, encontraremos que se ha aa-
dido una ruta y marca de fecha y hora a
la parte inferior del documento (Figura
7).
Conclusin
Al igual que Vim, Vim Outliner es un tanto
crptico y lleva algn tiempo aprenderlo. A
veces, algunas configuraciones que ignora-
mos pueden frustrarnos inutilizando o
anulando los comandos con los que esta-
mos intentando trabajar.
Sin embargo, con un poco de prctica,
Vim Outliner demuestra ser una herra-
mienta rpida y eficiente que puede adap-
tarse a flujos de trabajo variado. Adems,
si eres como yo, puede que encuentres
algo fascinante casi perverso realizar
tareas de perfilado desde la lnea de
comandos en esta era del escritorio.
Por tanto, mi consejo es que aprendas
unos cuantos comandos bsicos y le des
una oportunidad a Vim Outliner. Puede
que te sorprenda lo efectivo y satisfactorio
que puede llegar a ser.
La manera ms sencilla de crear plega-
mientos es introduciendo el comando :set
foldmethod=indent. Despus de que se
ejecute, se crea un plegamiento automti-
camente con cad nuevo sangrado es
decir, con cada nivel del esquema. El
mismo comando puede aadirse tambin
a .vim, de este modo siempre est habili-
tado. Sin embargo, introduciendo el
comando tambin se deshabilitarn otros
mtodos de creacin de plegamiento, los
cuales permiten un mayor control sobre la
creacin de los mismos.
Vim Outliner incluye varios mtodos
para aadir plegamientos. Si tenemos pro-
blemas usndolos probablemente por-
que el mtodo de plegamiento ha sido ya
establecido para algo ms con la ejecu-
cin de la instruccin :set
foldmethod=manual se deberan habili-
LINUX USER Lnea de Comandos: Vim Outliner
76
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
[1] Vim Outliner:
http:// freecode. com/ projects/
vimoutliner
[2] Comandos de Vim Outliner:
http:// www. sourcefiles. org/ Editors/
vi/ vimoutliner-0. 3. 4. tar. gz. shtml
[3] Comandos Vim:
http:// www. radford. edu/ ~mhtay/
CPSC120/ VIM_Editor_Commands.
htm
RECURSOS
Figura 5: En lugar del formateado limitado disponible en la lnea de
comandos, no tendremos ningn problema identificando un plega-
miento comprimido.
Figura 6: Un toque final: cuadros de verifica-
cin para no perder de vista lo que ya hemos
completado.
Figura 7: Como paso final, usamos uno de los
scripts que vienen con Vim Outliner para
convertir nuestro documento a un formato
comn, como HTML.
Konsultorio COMUNIDAD
77
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
Falta FFmpeg?
He odo que la herramienta univer-
sal de recodificacin de sonido y
vdeo FFmpeg ha desaparecido de las dis-
tribuciones. Qu ha ocurrido?
Debian y muchos de sus derivados
se estn moviendo hacia la sintaxis
reformada, pero compatible con FFmpeg
del derivado avconv, contenido en el
paquete libav-tools. El mantenedor de los
paquetes para Debian y Ubuntu
ffmpeg/libav-tools ha dado algunas razo-
nes para respaldar esto [1].
Si tenemos scripts que usan ffmpeg y
queremos que sigan funcionando cuando
desaparezcan las rdenes de ffmpeg en
favor de avconv tras la actualizacin, ten-
dremos que teclear
sudo ln -s avconv U
/usr/bin/ffmpeg
para crear un vnculo simblico que debe-
ra ser suficiente.
NTFS Montado como usuario
normal
Necesito redimensionar una parti-
cin NTFS con ntfsresize, que ya no
est presente en el antiguo paquete
ftp://usuario@ruta_U
del_anfitrin/U
ruta/a/los/archivos
El gestor de archivos nos preguntar por
nuestra contrasea de acceso o las credencia-
les de esta cuenta (Figura 1) y una vez intro-
ducidas correctamente, tendremos una trans-
ferencia de archivos bidireccional. No es
necesario un cliente para el protocolo de
transferencia de archivos de red especfico.
En cualquier caso, si nos preocupa que
los datos de nuestra cuenta estn seguros
ante manipulaciones o intentos de robo de
identidad, es muy recomendable usar slo
versiones cifradas para los protocolos de
gestin remota de datos, tales como
HTTPS, SFTP y SSHFS.
Tambin hay abreviaturas de URL en la
mayora de los navegadores modernos y
clientes de gestin de archivos. Por ejem-
plo, para acceder a los archivos en nuestro
directorio home remoto va protocolo SSH,
podemos introducir la URL de la siguiente
manera:
ssh://usuario@ruta_del_anfitrin
Hay que decir que PCManFM, como
cliente sencillo que es, slo permite gestio-
nes de archivos primitivas como la crea-
cin, renombrado, eliminado y copia. Si
intentamos abrir un archivo remoto con,
por ejemplo, un editor de texto, PCManFM
no intentar descargar el archivo antes de
modificarlo o enviar la URL a la aplicacin
para la edicin remota, mientras que
otros mejor integrados en los escritorios
como KDE y GNOME, pueden manejar
esto de manera ms transparente, de
manera que casi no nos daremos cuenta de
que estamos trabajando con una copia
local que volver a ser transferida de
nuevo al servidor de archivos remoto.
EL
KONSULTORIO
DE KLAUS
Desapareci el cliente FTP?
No hay un cliente grfico FTP en
Knoppix? Sola usar gFTP, pero ha
desaparecido en las ltimas versiones.
Realmente sigue habiendo clientes
FTP, a pesar de que ya no volvere-
mos a encontrar un cliente FTP en los
mens de muchas distribuciones, porque
FTP y otros protocolos ms seguros (como
SSHFS o SFTP) ahora estn integrados en
la capa del sistema de archivos virtual del
escritorio, en KDE as como en GNOME.
Incluso los ligeros PCManFM o LXDE pue-
den utilizar FTP a travs de GVFS. Simple-
mente al escribir nuestra URL de FTP de
esta manera:
Figura 1: PCManFM pide las credenciales de
acceso para poder acceder va FTP.
Klaus Knopper es el creador de
Knoppix y co-fundador de la
LinuxTag Expo. En la actualidad
trabaja como profesor, progra-
mador 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
talacin, la parte
compilada con
soporte FUSE inte-
grado debe
hacerse en el
momento de la
compilacin y
construccin del
paquete. El mante-
nedor del paquete
de Debian, decidi
en su versin actual
de ntfs-3g, cuya
integracin incluye
FUSE, que podra
ser una duplicacin
de cdigo y la insta-
lacin del setuid
podra ser poten-
cialmente insegura
comparada con la
opcin de soporte
FUSE externo. En
cualquier caso, se
construy el
paquete slo con
soporte FUSE
externo, lo que sig-
nifica que no pode-
mos usarlo para
montar volmenes
NTFS. Con usuario
sin privilegios,
tenemos que garan-
tizarnos el acceso
de superusuario
antes de llamar a ntfs-3g.
Para Knoppix, ahora hemos proporcio-
nado una versin modificada del paquete
ntfs-3g [3]. Despus de actualizar la base
de datos de software de Debian e introdu-
cir
sudo apt-get update
veremos el paquete modificado (Listado 3)
en la salida desde
apt-cache policy ntfs-3g
y se puede instalar con:
sudo apt-get install U
ntfs-3g=1:2012.1.15AR.5-U
2knoppix
Si an tenemos el antiguo paquete ntfs-3g-
ng instalado, debemos eliminarlo antes de
instalar la versin nueva.
Despus de la instalacin, comprobare-
mos si el binario ntfs-3g se instal con el
setuid root. Una variable debconf dispara
automticamente la instalacin del setuid
root, la cual se puede establecer con
echo set ntfs-3g/U
setuid-root true | U
sudo debconf-communicate U
ntfs-3g
para posteriores actualizaciones. Por ahora
podemos cambiar los permisos de /bin/
ntfs-3g a setuid/ setgid de la siguiente
manera:
chown root.fuse /bin/ntfs-3g
chmod u+rwxs,g+rxs,u+rx U
/bin/ntfs-3g
Despus de esto, es posible de nuevo mon-
tar particiones NTFS simplemente pul-
sando sobre ellas en el gestor de archivos o
llamndolas con
mount /media/sda2
(con /dev/ sda2 que contiene un sistema
de archivos NTFS) como usuario normal
porque /etc/ fstab ya contiene entradas
para particiones montadas por el usua-
rio.
Para Knoppix, no hay demasiados ms
riesgos en relacin a tener instalado ntfs-3g
como un programa setuid porque el nico
usuario en el sistema, knoppix, tiene per-
mitido cambiar a root sin contrasea de
todas maneras.
Para la instalacin en un sistema multiu-
suario, slo los usuarios de confianza
deberan ser capaces de llamar a los pro-
gramas setuid mount, de manera que
podemos ponerlos en el grupo fuse y elimi-
nar los permisos de ejecucin de otros para
/bin/ ntfs-3g en el ejemplo anterior.
ntfsprogs y he seguido las instrucciones de
knopper.net [2] haciendo
sudo apt-get update
sudo apt-get install U
-t unstable ntfs-3gU
ntfs-3g-ng-
lo cual elimina el paquete de slo mon-
taje ntfs-3g-ng y aade el original ntfs-3g
de Debian con todos los programas sopor-
tados. Lo que se consigue es este mensaje
de error (Listado 1) cuando se intenta
acceder a una particin NTFS desde el ges-
tor de archivos.
Parece que ya no es posible montar par-
ticiones NTFS como usuario normal. Cul
es el problema?
La URL mencionada en el mensaje
de error contiene la descripcin
correcta (Listado 2). Mientras que la
configuracin de los modos de permisos es
algo que podemos hacer despus de la ins-
COMUNIDAD Konsultorio
78
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
ntfs-3g:
Installed: (none)
Candidate: 1:2012.1.15AR.5-2knoppix
Version table:
*** 1:2012.1.15AR.5-2knoppix 0
500 http://debian-knoppix.alioth.debian.org/
./ Packages
100 /var/lib/dpkg/status
1:2012.1.15AR.5-2 0
500 http://ftp.de.debian.org/debian/
unstable/main i386 Packages
1:2012.1.15AR.1-1 0
990 http://ftp.de.debian.org/debian/
testing/main i386 Packages
1:2010.3.6-1 0
500 http://ftp.de.debian.org/debian/
stable/main i386 Packages
Listado 3: Paquetes Modificados
Unprivileged block device mounts work only if all the below
requirements are met:
ntfs-3g is compiled with integrated FUSE support
the ntfs-3g binary is at least version 1.2506
the ntfs-3g binary is set to setuid-root
the user has access right to the volume
the user has access right to the mount point
The root user can make an ntfs-3g binary setuid-root as shown
below
chown root $(which ntfs-3g)
chmod 4755 $(which ntfs-3g)
Listado 2: URL en el Mensaje de Error
Error mounting: mount exited with exit code 1: helper failed
with:
Error opening /dev/sda2: Permission denied
Failed to mount /dev/sda2: Permission denied
Please check /dev/sda2 and the ntfs-3g binary
permissions,
and the mounting user ID. More explanation is provided at
http://tuxera.com/community/ntfs-3g-faq/#unprivileged
Listado 1: Mensaje de Error de NTFS
[1] FFmpge/ libav-tools en Debian y
Ubuntu:
https:// lists. ubuntu. com/ archives/
technical-board/ 2011-May/ 000891.
html
[2] knopper.net:
http:// knopper. net/ knoppix/
knoppix702-en. html#bugs
[3] ntfs-3g para Knoppix:
http:// debian-knoppix. alioth. debian.
org/ packages/ ntfs-3g/
RECURSOS
COMUNIDAD Accesibilidad
E
l signo ms aterrador que vi fue
en San Francisco a principios de
la Era Web. Yo estaba condu-
ciendo por la carretera 101 hacia el
Puente Golden Gate, cuando, en lo ms
alto de un edificio, vi un cartel que deca
www.NOMBRE-DE-BANCO-
GIGANTESCO.com, con el nombre de
un banco ciertamente grande y pode-
roso. En el cartel no apareca ni direc-
cin, ni telfono ni otra manera de des-
cribir al banco que no fuese su URL y
esto era en una poca en que la gente no
era capaz ni de deletrear URL.
Me dije a mi mismo: este banco est
discriminando al 99% de sus clientes.
Si no tienes un ordenador o no sabes
nada sobre la web, est claro que este
banco no se preocupa por ti y realmente
no quiere hacer negocios contigo. Del
mismo modo, imagina si una empresa
dice lo siento pero no atiendo a perso-
nas con el pelo negro o no le dejo
acceder al edificio porque mides ms de
un metro noventa y cinco y slo repre-
sentis el 5% de la poblacin. Te enfa-
daras.
Sin embargo, esto es lo que los disea-
dores de hardware y los desarrolladores
de software dicen a diario a los personas
con problemas fsicos para usar los orde-
nadores, por no pensar en la accesibili-
dad. La accesibilidad en los ordenadores
no es nada nuevo. En 1977 cuando ense-
aba en el Hartford State Technical
College haba dos estudiantes completa-
mente ciegos. Podan notar alguna dife-
rencia entre la luz y la oscuridad, pero
slo si la luz era muy brillante. Estos
estudiantes usaban un terminal Braille
enorme y que utilizaba un papel muy
caro. Tambin usaban unos terminales
porttiles de mano llamados Opticons
que elevaban unos pines para duplicar
los caracteres del papel o de la pantalla.
Este proceso no traduca a Braille para
que los estudiantes pudiesen leer rpida-
mente, sino que el Opticons permita a
los estudiantes leer texto estndar pero
muy lentamente. El Estado de Connecti-
cut tambin proporcionaba lectores
humanos para estos estudiantes, a quie-
nes se les pagaba para que leyeran las
pantallas y el material impreso. A
menudo los lectores eran otro estudian-
tes, que as ganaban algn dinero ade-
ms de tener la oportunidad de leer
realmente sus libros de texto.
Ms tarde, experiment este problema
cuando coincid en Digital con la persona
encargada del programa de emulacin de
terminal para DECWindows, una pri-
mera implementacin de X Window
System para los sistemas operati-
vos Unix y VMS de Digital. Esta
persona tena grandes dificulta-
des para ver la pantalla, as que
Digital le puso la pantalla ms
grande que fabricaba por aquel
entonces. Usndola junto a X
Window System para acercar
el contenido, poda ver cada
pxel de cada carcter.
Hace unos aos comenc a realizar
vdeos y Worm Joner, un amigo mo,
contact conmigo y me pregunt si que-
ra hacer subttulos. Me explic que los
subttulos no son solamente tiles para
los que no hablan ingls, tambin lo son
para las personas que tienen problemas
auditivos e incluso pueden ser tiles en
lugares ruidosos como puede ser un bar.
Es bien sabido que paso un tiempo con-
siderable en bares, as que apreci since-
ramente la observacin y empezamos a
proporcionar subttulos para los vdeos.
Muchas personas se quejan de la falta
de un teclado fsico en los telfonos, pero
desde que descubr la entrada de voz en
mi telfono Android tecleo mucho
menos y mucho ms rpido. Los SMS
han adquirido una nueva utilidad para
mi. Y aunque la entrada de voz tambin
es til para las personas invidentes, tene-
mos que mejorarla.
Soy feliz al decir que la accesibilidad
recibi atencin muy pronto en el
mbito del software libre y del cdigo
abierto. No s si esto es as porque
parece que la gente del software libre se
ha preocupado un poco ms por estos
asuntos o porque el software libre ha
permitido a la gente con discapacidades
fsicas satisfacer sus propias necesidades
de software. Hay gente tratando de resol-
ver estas cuestiones en los proyectos
Gnome y KDE.
Sin embargo, estas tcnicas y herra-
mientas que he mencionado slo son ti-
les si la gente disea desde el principio
sus programas, pginas web y aplicacio-
nes para adaptarse a ellos. Es necesario
que los desarrolladores de software, dise-
adores de hardware y todos los dems
involucrados en la produccin de orde-
nadores consideren los problemas de
accesibilidad desde el comienzo. Para
aquellos que todava tengan dudas, tan
slo tienen que pensar en qu sera hoy
del mundo de la fsica si Stephen Haw-
king no hubiera podido comunicarse.
ACCESO COMPLETO
Diseando ordenadores para todos: Maddog revisa algunos problemas de accesibilidad en la informtica.
POR JON MADDOG HALL
80
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
81
Nmero 89 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
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
Taller de Creacin de Videojuegos 10 Ene, 2013 Madrid, Spain desarrolladoresdevideojuegos.es
Congreso Inter. Itinerante Ecuador 20 - 23 Feb, 2013 VV.LL., Ecuador softwarelibre.info
Mobile World Congress 25 - 28 Feb, 2013 Barcelona, Espaa www.mobileworldcongress.com
Akademy 2013 13 - 19 Jul, 2013 Bilbao, Espaa akademy2013.kde.org
Resto del Mundo
Evento Fecha Ciudad / Regin Sitio Web
Univention Summit 2013 17 - 18 Ene Bremen, Alemania www.univention.de
Fosdem 02 - 03 Feb Bruselas, Blgica fosdem.org/2013
Android Builders Summit 18 - 19 Feb San Francisco, EE.UU. events.linuxfoundation.org
SCaLE 11x 22 - 24 Feb San Diego, EE.UU. www.socallinuxexpo.org/scale11x
GUUG FFG 2013 26 Feb - 01 Mar Frankfurt, Alemania www.guug.de
CeBIT 2013 05 - 09 Mar Hannover, Alemania www.cebit.org
LinuxTag 2013 22 - 25 Mar Berln, Alemania www.linuxtag.org
Automotive Linux Summit 27 - 28 May Tokyo, Japn events.linuxfoundation.org
Guadec 2013 01 - 08 Ago Brno, Chequia guadec.org
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
Mobile World
Congress
Fecha: 25 - 28 Feb.
Lugar: Barcelona, Espaa
Web: www.mobileworldcongress.com
Congreso Intern.
Itinerante Ecuador
Fecha: 20 - 23 Feb. 2013
Lugar: Varias localizaciones, Ecuador
Web: softwarelibre.info
Akademy
2013
Fecha: 13 - 19 Jul.
Lugar: Bilbao, Espaa
Web: akademy2013.kde.org
PRXIMO NMERO PRXIMO NMERO
i
r
u
m
x
d
e
,

1
2
3
R
F
Desarrollo
Web
A LA VENTA: FEBRERO 2013
82
Nmero 89 WWW. L I NUX- MAGAZI NE. ES
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/
El mundo depende de Internet e Internet depende de
Linux. Tanto si eres un desarrollador web o profesio-
nal de la industria de las tecnologas de la informa-
cin, como si eres un poweruser que siempre tiene
que estar a la ltima de las nuevas tendencias y las
herramientas que requieren, no te pierdas el nmero
90 de Linux Magazine, donde exploramos HTML5 y
otras imprescindibles tecnologas de red.

Você também pode gostar