SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
1
2




                                                        SUMARIO
                                                                       ENTRY POINT      4

                                                         INTRODUCCIÓN A LAS BASES
                                                        DE DATOS RELACIONALES(XII)      6


                                                                   PROYECTO #CODE:
                                                          PANEL DE CONTROL FEROZO      14


                                                          DESARROLLO DE SOFTWARE
                                                                  ÁGIL CON SCRUM       22


                                                           TESTING DE APLICACIONES     30


                                                        LAS LEYES DE PROGRAMACIÓN
                                                                DE TAYLOR (PARTE II)   40


                                                             CHOQUE DE GIGANTES: F
                                                               ACEBOOK VS GOOGLE+      48




    Las opiniones expresadas en los artículos
    son exclusiva responsabilidad de sus autores y no
    coinciden necesariamente con la opinión
    de Dattatec.com SRL.
STAFF
DIRECTORA Y JEFA DE REDACCIÓN
Débora Orué

COLUMNISTAS
Gabriel Walter Gaitano Ornia
Juan Gutmann
Mariano Salvetti
Matías Iácono
Roxana Miguel

DISEÑO EDITORIAL Y CREATIVIDAD
www.americanbread.net
Arte de tapa: Esteban Paniagua

COMERCIALIZACIÓN
DATTATEC.COM SRL
Córdoba 3753, Rosario, Santa fe
www.dattatec.com

REDACCIÓN
lectores@pixelscode.com

DATOS DE CONTACTO
Dirección comercial:
publicidad@pixelscode.com




                                  3
4




ENTRY
POINT
ENTRY
POINT




GADGETS:                                                 SEGURIDAD
                                                         E INTERNET

Y, finalmente, la empresa de la manzana lo hizo          Luego de las películas le llega el turno a los libros.
de nuevo: Apple presentó en sociedad una nueva           Un importante grupo de casas editoriales de EE.UU.
versión de su popular tableta iPad, largamente           y Europa ha apuntado su artillería contra el sitio
esperada por el aficionado a la tecnología.              Library.nu, que era considerado como un formidable
                                                         reservorio de ebooks y que, con una modalidad
Equipada con un procesador más rápido, dotada            similar a Megaupload, alcanzaba una recaudación
con tecnología 4G, es considerada una verdadera          en publicidad de más de 10 millones de dólares.
revolución. Esta es la tercera versión que llega a las
vitrinas, con la que espera conservar el liderazgo       En este sitio los usuarios subían sus datos y recibían
del mercado que le es intensamente disputado por         un link que podían compartir con sus otros contactos.
empresas como Amazon y Samsung, entre otras. Aún         Los servicios eran utilizados generalmente para el
no se la ha liberado en nuestro país, pero ya hay gran   alojamiento de libros digitales que, de este modo,
expectativa por su desembarco en estas playas.           podían ser compartidos o leídos en formato PDF    .

                                                         El sitio ha sido dejado inoperativo por requisitoria
                                                         judicial, dejando en claro que la batalla por el
                                                         modelo de comercialización y compartición de los
                                                         medios por la red no ha hecho más que empezar.
Gabriel Gaitano Ornia
                                                                             gabriel.gaitanoornia@pixelscode.com




WEB PARA                                                 IT NEWS:
CONOCER:

A pesar de estar fuertemente orientada a los productos   Problemas con el nuevo Windows 8
Microsoft, si nuestro trabajo nos lleva a utilizarlos
como developers tenemos un excelente                     Microsoft había, sin duda, imaginado que algunos
recurso disponible para utilizar en el sitio http://     usuarios encontrarían la transición y cambio desde
www.codeproject.com.                                     el actual producto líder, Windows 7, a su planeado
                                                         sucesor Windows 8 como algo desafiante. Pero es poco
Aquí vamos a encontrar una sabrosa combinación           probable que estuviera preparada para la reacción de
de artículos, Blogs técnicos con datos de                su propia comunidad base. Esta se ha manifestado
consultas, trucos interesantes de programación           en el Windows 8 Consumer Preview, o revisión inicial
y, como no podía faltar, un foro de discusión,           de consumidores. Especialmente denostadas en los
así como un repositorio de preguntas donde               comentarios de los usuarios han sido la nueva interfaz
podemos plantear nuestras propias dudas. C#,             estilo tablet, llamada Metro y concebida para competir
ASP .NET y otras tecnologías de la empresa de            con el popular iPad de Apple; y la desaparición del
Redmond aparecen en estos medios con abundante           viejo y querido botón de Inicio. De hecho, muchos
información práctica y muy útil en nuestro trabajo       usuarios han señalado que el producto entero es un
con esas tecnologías.                                    “substancial paso hacia atrás”.

                                                         Las opciones para Microsoft son, ahora, demorar
                                                         el producto para tratar de suavizar los cambios,
                                                         por ejemplo, haciendo la nueva interfaz optativa
                                                         (salvo para tabletas y teléfonos) o seguir
                                                         adelante confiando que el usuario acabará por
                                                         acostumbrarse a los cambios. Que esta vez son
                                                         mucho más de lo acostumbrado.


                                                                                                               5
6




    INTRODUCCIÓN
    A LAS BASES DE DATOS
    RELACIONALES(XII)
    Hace unas semanas, un lector nos escribía             Ni hablar si lo comparamos contra un gran servidor
    consultándonos acerca de la posibilidad de trabajar   corporativo, donde normalmente corre el software
    con una base de datos relacional en una aplicación    de base de datos relacional en las empresas
    para smartphones. Esta es una pregunta que se         medianas y grandes. ¿Esto significa que tenemos
    escucha cada vez más en los últimos tiempos.          que renunciar a programar como más nos gusta,
    Cuando se desarrolla para dispositivos embebidos,     para complicarnos la existencia almacenando la
    ya sean equipos muy pequeños y específicos (como      información de otra manera? Afortunadamente, no.
    un controlador de maquinaria industrial) o más        Aunque tendremos que prescindir de bases potentes y
    voluminosos y versátiles -smartphones o tablets-      flexibles, como lo es PostgreSQL, existen alternativas
    nos encontraremos con una situación en la que         pensadas para estos casos que permiten trabajar
    necesitamos hacer mucho con pocos recursos. La        con un motor relacional lo suficientemente funcional
    cantidad de memoria y el poder de procesamiento       como para satisfacer las necesidades de cualquier
    del CPU de este tipo de aparatos son más bien         aplicación escrita para este tipo de plataformas. Aquí
    limitados, en comparación con una PC hogareña.        presentamos una de ellas: SQLite.
Juan Gutmann
juan.gutmann@pixelscode.com




                         7
8




    CARACTERÍSTICAS
    DE SQLITE



    SQLite no es un motor de base de            para su empleo en dispositivos
    datos relacional, aunque trabaja            móviles y embebidos, ya que al no
    de forma idéntica a uno. Ocurre             existir un motor propiamente dicho,
    que no se trata de un programa (o           el empleo de la base de datos tiene
    conjunto de programas) “servidor”,          costo cero en recursos, ya que no
    que se encuentra corriendo                  existe un servidor que requiera de
    permanentemente (como un                    memoria RAM, espacio en el sistema
    demonio), atendiendo peticiones             de archivos y ciclos de CPU para
    en un puerto de red. En cambio,             funcionar. Los recursos consumidos
    toma la forma de una pequeña                dependerán exclusivamente de
    librería desarrollada en lenguaje           la forma en la que programemos
    C. Sus principales virtudes están           nuestro aplicativo. Para su pequeño
    bien descriptas en la página web            “footprint”, SQLite es notablemente
    del proyecto, [http://sqlite.org/]:         flexible. Aunque debemos renunciar
    es “self-contained” (no posee               al empleo de Stored Functions
    dependencias de otras librerías),           (los Procedimientos Almacenados,
    “serverless” (según acabamos de             que nos vienen dando tan buenos
    describir, no requiere de un proceso        resultados con PostGres), sí cuenta
    ejecutándose en forma constante),           con la posibilidad de crear Triggers,
    “zero configuration” (no requiere           aunque su funcionalidad -claro
    realizar tareas de instalación ni           está- es acotada. SQLite corre en
    configuración) y “transactional”            prácticamente cualquier plataforma
    (transaccional; como nuestros               para la que exista un compilador de
    lectores ya saben, esto quiere decir        lenguaje C, y lo mejor de todo es que
    que pueden agruparse una serie de           para programar software que la utilice
    cambios realizados a la información         no nos encontramos limitados a este
    contenida para que sean confirmados         mismo lenguaje, sino que podemos
    o deshechos en conjunto en el caso de       hacerlo en casi cualquier tecnología
    existir algún tipo de error). Al escribir   de desarrollo que se nos ocurra:
    una aplicación que trabaje con ella,        C++, Java, JavaScript, Lisp, Perl,
    podemos leer y escribir datos en un         PHP Python, Ruby y Tcl son apenas
                                                     ,
    archivo “base”. Por ello es apropiada       algunos de ellos.
ORÍGENES
DE SQLITE
La librería SQLite fue creada por el     una especie de “wrapper” de gdbm,             A esta altura del proyecto, miles de
programador norteamericano Richard       que le permitía escribir en SQL los           usuarios estaban involucrados en su
Hipp, cuya labor ya era reconocida       comandos para crear, modificar o              utilización y mejora, entre ellos un
en el mundo del Software Libre y         borrar la información contenida en            número importante de empresas.
de Código Abierto por ser uno de         la base, delegando al código original         Una de las más grandes, AOL, puso
los desarrolladores del lenguaje Tcl.    del Proyecto GNU la tarea de realizar         una suma importante de dinero para
Cuando fue empleado por la empresa       físicamente las lecturas y escrituras         acelerar el desarrollo de SQLite, tras
General Dynamics para mantener           necesarias en el sistema de archivos.         lo cual fue liberada la siguiente versión
el software encargado de controlar       La segunda versión de SQLite (la              (3.0), que incorporó un sinfín de
barcos de guerra de la U.S. Navy (la     2.0) sustituyó definitivamente el             mejoras. La última versión estable, la
marina de guerra norteamericana),        código de gdbm, implementando                 3.7.10, publicada los primeros días del
se le solicitó modificar los programas   una base propia, basada en B-trees.           corriente año, se basa en dicha versión.
críticos para poder prescindir del
pesado motor de base de datos
relacional con el que trabajaban
(Informix). Richard estaba muy
familiarizado con el Proyecto GNU, el
emprendimiento de Richard Stallman
para crear un Sistema Operativo
totalmente libre, gracias a su trabajo
en el lenguaje Tcl. Sabía que uno
de los paquetes que componen el
proyecto, llamado gdbm (una versión
no propietaria de la librería dbm para
UNIX, que permite implementar un
sencillo sistema de base de datos)
cumplía con los requerimientos que le
habían sido especificados. Tomando
el código de gdbm, Hipp puso manos
a la obra, y luego de algunas semanas
de trabajo nació la versión 1.0 de
SQLite. Esta primera versión era


                                                                   SQLite es una base de datos ideal para emplear en teléfonos móviles,
                                                         a punto tal que tanto el Sistema Operativo del iPhone (iOS) y el de los teléfonos
                                                                                           basados en Android incorporan esta librería.




                                                                                                                                       9
10




                                                     LICENCIA
                                                     DE SQLITE
                                                     Un factor determinante a la hora de
                                                     elegir un sistema de base de datos es
                                                     su licencia. La licencia GPL de MySQL,
                                                     por ejemplo, impide incorporarla a una
                                                     aplicación propietaria, salvo que se
                                                     opte por recurrir a una versión privativa
                                                     del motor, que sí permite este tipo de
                                                     usos, pero no es gratuita. La licencia
                                                     de SQLite es otro punto a favor en este
                                                     sentido a la hora de desarrollar para
                                                     dispositivos con escasos recursos.

                                                     Tanto las versiones binarias de la
                                                     librería como el código fuente se
                                                     encuentran liberadas en el “dominio
                                                     público”, lo que permite su uso, copia,
                                                     modificación, distribución e incluso
                                                     su venta bajo cualquier circunstancia,
                                                     incluyendo su incorporación a un
                                                     software propietario.




     El shell de SQLite permite acceder a las bases de datos sin
     necesidad de escribir programas en alguno de los lenguajes soportados.
DESCARGA E                                SOPORTE Y
INSTALACIÓN                               DOCUMENTACIÓN
Algunos lenguajes, como PHP o             En el sitio web de SQLite se encuentra          módico”. También figuran en el sitio
Python, ya incluyen SQLite en             publicada abundante documentación               algunas listas de correo a las que
sus paquetes de instalación. Para         sobre sus características y utilización,        suscribirse para enterarse de las
desarrollar en otros lenguajes con        así como una completa referencia de             últimas novedades, intercambiar
SQLite tenemos diversas alternativas.     la librería, sus APIs desde distintos           información y solicitar ayuda.
Bajo GNU/Linux, puede obtenerse           lenguajes (como C++ y Tcl), tutoriales
mediante el administrador de              y ejemplos, y también enlaces hacia             Por último, aunque SQLite es libre
paquetes correspondiente a cada           libros (online y en papel) publicados           y gratuito, pueden conseguirse
distribución. Pueden descargarse          por distintos autores sobre el                  allí enlaces hacia extensiones
del sitio oficial de SQLite los fuentes   desarrollo de aplicaciones en conjunto          propietarias (algunas de ellas pagas)
de la librería y compilarlos con el       con esta base de datos relacional.              que agregan funcionalidad no
compilador de C de su preferencia,                                                        ofrecida por la versión estándar de la
bajar directamente los binarios           Además, su autor original, Richard              librería. La más interesante de ellas
precompilados para diversas               Hipp, y su empresa (Hwaci) ofrecen              es SEE (SQLite Encryption Extension)
plataformas.                              soporte e inclusive la posibilidad de           que permite trabajar con una base de
                                          realizar modificaciones específicas             datos cifrada con potentes algoritmos
En el sitio se ofrecen binarios para      a pedido, según ellos “por un precio            AES de 128 y 256 bits.
Linux, Mac OS X, Windows y .NET.
También se ofrecen junto con los
binarios de las librerías un shell de
comandos ejecutable, que permite
ingresar directamente en la consola
las órdenes SQL para manipular
las bases de datos SQLite. Por
último, debe obtenerse la librería de
“binding” que corresponda a cada
lenguaje. Para este último paso, se
aconseja recurrir a la ayuda online de
dicho lenguaje.




                                                         Como casi todos los motores relacionales que se precien de tal, SQLite también
                                                  cuenta con sofisticadas herramientas visuales desarrolladas por terceros que permiten
                                                                                               administrar y mantener la base de datos.   11
12




                                              UN EJEMPLO
                                              EN PYTHON
                                              A continuación, un ejemplo de código
                                              Python que trabaja con el “binding”
                                              de SQLite. En este ejemplo, que se
                                              extiende por apenas unas pocas
                                              líneas de código (siguiendo la
                                              tradición “pythónica”) se comienza
                                              por crear una base permanente en
                                              el sistema de archivos raíz (puede
                                              crearse una base temporal en
                                              memoria, que desaparecerá cuando
                                              finalice la ejecución de la aplicación),
                                              prosigue creando una tabla y
                                              ejecutando SQL INSERTs para generar
                                              dos registros, y finaliza leyendo el
                                              contenido de la tabla y volcándolo a
                                              pantalla.




     Gráfico comparativo de la performance de MySQL contra la de SQLite.
     Aunque MySQL gana por poco, su consumo de recursos muy superior inclina la
     balanza en favor de la librería que nos ocupa en esta edición.
Richard Hipp, creador y principal
                                                                                        mantenedor de SQLite.




                                       CONCLUSIONES

from sqlite3 import dbapi2 as sqlite   Unos pocos conocimientos del trabajo
connection = sqlite.connect(‹/tmp/     con cualquier motor relacional, y
prueba.db›)                            un equipo informático con algo de
cursor = connection.cursor()           RAM libre alcanzan para trabajar con
query = «CREATE TABLE empleado         SQLite.
(legajo INTEGER PRIMARY KEY, cargo
VARCHAR(10),»                          El lenguaje SQL es una forma sencilla
query += «apellido_y_nombre            y eficaz de almacenar, modificar
VARCHAR(100), supervisor               y recuperar información de cierta
INTEGER)»                              complejidad. No por nada entre los
cursor.execute(query)                  usuarios de esta excelente librería
query = «INSERT INTO empleado          se cuentan gigantes de la industria
VALUES «                               informática, como Mozilla, Google,
query += «(1, ‹GTEGRAL›, ‹Carlos       Apple, Nokia y Adobe. Por supuesto,
Gomez›, 1)»                            el hecho de que esta base sea
cursor.execute(query)                  ideal para trabajar en dispositivos
query = «INSERT INTO empleado          embebidos y móviles no lo limita a
VALUES «                               estas plataformas; emplearla en una
query += «(2, ‹SUPERVISOR›, ‹Jorge     aplicación hecha y derecha para las
Gonzalez›, 1)»                         PC tradicionales es una buena idea,
cursor.execute(query)                  si tenemos estructuras complejas
connection.commit()                    de datos con las que queremos
cursor.execute(«SELECT * FROM          interactuar, y preferimos obviar la
empleado»)                             dependencia de un motor tradicional,
resultset = cursor.fetchall()          como MySQL.
for row in resultset:
     print row[0], row[1], row[2],     En definitiva, contar a SQLite entre
row[3]                                 nuestro arsenal de conocimientos
connection.close()                     dentro del mundo de las bases de
                                       datos amplía nuestros horizontes
                                       en gran manera, y por lo tanto es
                                       imprescindible tener aunque sea
                                       nociones básicas de su empleo.




                                                                                                             13
14




              PROYECTO
              #CODE: PANEL DE
              CONTROL FEROZO



     ENTREVISTA
     Ing. Daniel Lázaro,.
     Coordinador
     Área Desarrollo de Dattatec.




     Bienvenidos a esta nueva sección de Pixels&Code que      En esta primera entrega de Proyecto #Code,
     hemos decidido llamar “Proyecto #Code”. La idea de       decidimos empezar por casa y reunirnos con Daniel
     esta sección es que sea una puerta para compartir con    Lázaro, quien es la persona encargada de una de
     ustedes los diferentes programas que revolucionan el     las piedras basales de Dattatec: el panel de control
     mundo del software. Para ello nos comprometemos a        Ferozo, un software que tiene como objetivo construir
     involucrarnos de lleno en los diferentes proyectos que   proyectos Web de fácil administración, con el cual
     aquí destaquemos, yendo directamente a las fuentes       podamos tener presencia en internet de manera
     y entrevistando a las personas que están directamente    inmediata, para volcar nuestras ideas y tener una
     relacionadas con el proyecto del mes.                    amplia llegada hacia nuestros clientes.
Franco Rivero
franco.rivero@pixelscode.com




                           15
16




     Pixels&Code: Daniel, contale a nuestros lectores de
     qué se trata Ferozo.

     Daniel Lázaro: Ferozo es un panel de control para
     hosting, pionero a nivel nacional, 100% desarrollo
     propio, con versiones en las dos plataformas más
     importantes de hosting (Linux y Windows), y dividido
     convenientemente en módulos que abarcan todos los
     estratos de usuarios y necesidades (panel para usuarios
     de hosting, panel para revendedores de hosting y
     administradores de servidores, panel para usuarios de
     webmail y constructor on-line de sitios web).

     Ferozo es un proyecto enteramente desarrollado en
     Rosario, que tiene alcance mundial a través del uso que   y servicios para que otras compañías almacenen
     los clientes de Dattatec le dan como panel de control     cualquier información que quieran que sea accesible
     para (auto) gestionar los recursos del servicio de        por una red, desde sus páginas web, hasta la
     hosting que la empresa brinda.                            información de su red interna o Intranet y sus
                                                               casillas de correo.
     P&C: ¿Qué diferencias radicales distancian a Ferozo
     de otros sistemas de gestión de contenidos como           Siguiendo con este ejemplo, los paneles de control de
     Wordpress?                                                hosting vendrían a ser, en la web, algo así como los
                                                               conserjes y el servicio de cuarto de nuestro hotel del
     DL: Bueno, para empezar, las diferencias son muchas       ejemplo. En definitiva, una suerte de administradores,
     ya que Ferozo no es un Sistema de Gestión de              coordinadores y árbitros del servicio.
     Contenidos (CMS) como WordPress, sino un Panel de
     Control para Hosting.                                     P&C: ¿Cuáles son las ventajas de operar con un panel
                                                               de control?
     Para explicarlo de una forma sencilla voy a hacer
     abuso de un ejemplo comparativo que me agrada.            DL: ¡Muchísimas! Hoy en día casi no se concibe
     Las empresas que se dedican al servicio de hosting        administrar un servidor de hosting en forma manual.
     son como los hoteleros de la red: ofrecen espacio         Además, eso sólo es posible en casos muy específicos.
Por lo general, los administradores de servidores
de hosting prefieren dejar convenientemente en
manos de los usuarios tareas como crear cuentas
de correo, agregar dominios a un sitio, instalar
una aplicación como Wordpress, etc. Creo que
es muy clara la ventaja, por parte del usuario, de
no tener que depender de un administrador de
servidor para realizar tareas rutinarias como las
mencionadas anteriormente. Y mucho más: por
ejemplo, los revendedores de hosting pueden crear
nuevas cuentas para sus clientes sin interactuar
con ningún “Sysadmin”; y los usuarios de webmail
pueden configurar su filtro antispam sin necesidad
de depender del webmaster.

P&C: ¿Cuánto tiempo tardaron en desarrollarlo
y cuál fue el capital humano involucrado en el
proyecto?                                            17
18




     DL: Las primeras versiones de cada plataforma              buscado desde edad temprana de Ferozo para
     tardaron alrededor de un año cada una para                 alcanzar el éxito en materia del servicio de hosting.
     desarrollarse e involucraron un equipo de un total         Por otro lado, a nivel estratégico empresarial, Ferozo
     de 4 personas entre las dos.                               significó la integración vertical y la independencia
                                                                de la empresa Dattatec de proveedores externos,
     El proyecto Ferozo continúa hoy en día más vigente         obteniendo de estos factores grandes ventajas
     que nunca, con un equipo de más de 15 personas,            competitivas.
     entre arquitectos de software, desarrolladores,
     sysadmines y diseñadores web.                              P&C: ¿Qué devolución han obtenido de los usuarios
                                                                finales?
     P&C: Teniendo en cuenta que con esta herramienta
     podemos generar y tomar el control rápidamente de          DL: Los usuarios siempre se muestran complacidos
     sitio web, ¿cuál fue el aporte de Ferozo en el meteórico   por los avances y mejoras que Ferozo les va
     ascenso que ha tenido Dattatec en los últimos años?        brindando. Recibimos de ellos una buena cantidad
                                                                de feedback, casi siempre a modo de sugerencias
     DL: Puedo afirmar que el poder generar fácilmente          y oportunidades de mejora. La realimentación que
     un sitio desde una herramienta anexa al panel de           recibimos de parte de nuestros usuarios es siempre
     control, fue un factor clave y estratégicamente            uno de los más valiosos motores que generan los
                                                                cambios y los agregados de funcionalidades y
                                                                tecnologías. La verdad, siempre hemos sentido esa
                                                                sinergia con nuestros usuarios. Esa sensación de ir
                                                                avanzando juntos en el camino. Siempre mejorando
                                                                y haciéndonos mejorar mutuamente. Estamos muy
                                                                agradecidos de haber logrado esa relación.

                                                                P&C: ¿Cuáles son las nuevas características en el
                                                                desarrollo que incluyeron últimamente y cómo crecerá
                                                                Ferozo en este año?

                                                                DL: Últimamente estuvimos trabajando más que
                                                                nada en las interfaces y la usabilidad. Le agregamos
                                                                un modo simple a la interfaz de Ferozo en el panel
para usuarios de hosting, con las opciones mínimas
y más usadas en la etapa de “set up” de un sitio,
de forma que cada cuenta de hosting que es creada
utiliza por defecto este modo simple que, por
un lado, facilita al recién iniciado en materias de
hosting la configuración inicial de su sitio, y por otro,
le deja un cómodo acceso a las funcionalidades más
requeridas a los más experimentados.

También hemos estrenado nuevas interfaces para el
clásico “modo avanzado” de Ferozo para usuarios de
hosting. Hemos re-hecho las interfaces resultando las
nuevas con características totalmente Web 2.0: Ajax,
recargas parciales, mejor usabilidad y funcionalidades
ampliadas en general.

Con respecto a este año, podemos adelantar que pronto
se viene el soporte de acceso seguro (SSL/HTTPS)            19
20




                                                               DL: Ferozo está incluido en los planes del servicio de
                                                               hosting de Dattatec y se lo puede utilizar al contratar
                                                               cualquier plan.
                                                               Pueden visitar los siguientes enlaces para probar Ferozo y
                                                               para obtener ayuda y más información asociada al panel:
                                                               http://ferozo.net

                                                               Panel de Control del Constructor de Sitios Ferozosite
                                                               URL: http://ferozositedemo.dattatec.com:2085/
                                                               Usuario: fsdemo / Contraseña: fsdemo

                                                               Panel de Control para usuarios de Hosting, plataforma
                                                               Windows:
                                                               URL: http://windows.dattatec.com:2082/
                                                               Usuario: demo / Contraseña: demo
     para el panel y la integración con nuestra solución de
     comercio electrónico.
                                                               Panel de Control para usuarios de Hosting, plataforma
                                                               Linux:
     P&C: Contanos cómo fue la experiencia personal al
     presentar a Ferozo en los premios Sadosky.

     DL: Sinceramente, fue algo natural. Después de trabajar
     tantos años en un proyecto de alcance internacional
     que les es útil a más de 80.000 usuarios, nada más
     sentimos que era hora de presentarlo como candidato
     a tan distinguido premio. Por supuesto, siempre nos
     sentimos orgullosos de lo que hacemos y nuestro mejor
     premio es el reconocimiento de nuestros usuarios.

     P&C: Por último, ¿cuáles son los costos finales de
     Ferozo para los usuarios y cómo pueden acceder a una
     demo para evaluar su potencial?
URL: http://demopanel.dattatec.com:2082/
Usuario: demo / Contraseña: demo


¿POR QUÉ
FEROZO?
Mientras charlamos con Daniel, durante la entrevista
no podía dejar de preguntarme el origen del nombre
Ferozo. La respuesta vino de la mano de Diego Vitali
(Marketing Manager de Dattatec), quien amablemente
arrojó algo de luz sobre el tema.

“Durante los tiempos en que Guillermo Tornatore
(CEO y fundador de Dattatec) toma la decisión de
comenzar a desarrollar nuestro propio panel de
hosting, él viaja con su familia unos días a Córdoba
para descansar, y por supuesto, definir un nombre
para el panel era una de las cosas que «viajaban en
su cabeza». Por aquel entonces, su hija mayor tenía 3
años. En un momento del viaje, Guillermo manejaba
por una zona de bosques frondosos al costado del
camino y ante este paisaje, le comenta a su hija que
en esos bosques vivía el Lobo Feroz del cuento de
Caperucita Roja, con el objetivo de entretenerla y
llamar su atención, a lo cual su hija le pregunta ¿Ahí
vive el lobo Ferozo?... Esto quedó en la mente de
Guillermo y al regresar a Rosario el tema del nombre
del panel estaba resuelto. Quien en otro momento
había sido motivo de la decisión de Guillermo de
desarrollar Dattatec desde Argentina, puso también el
nombre al panel de control”.                             21
22




     DESARROLLO DE
     SOFTWARE
     ÁGIL CON SCRUM
     Cuando hablamos de desarrollo de software muchas          Pero en la gestión es especialmente compleja debido
     veces sólo nos quedamos en la superficie de lo que        a que existen diferentes vertientes paradigmáticas que
     en realidad es el vasto, y muy profundo, mar de la        intentan sobresalir de otras. Debido a esto es que se
     ingeniería de software. Es común que hablemos de          han llegado a entablar peleas internas en empresas,
     creación de líneas de código, técnicas y herramientas     separando a las personas en bandos. Aquellos que
     para mejorar nuestro rendimiento, velocidad o             apoyan un modelo, otros que no están tan seguros y
     facilidad en la escritura de código, menos errores o      prefieren pivotear entre varios, y otros que prefieren
     una mejor calidad visual de nuestras aplicaciones,        los métodos ya conocidos y con más tiempo de
     pero el desarrollo de software no se reduce sólo          implementación en el mundo del desarrollo.
     a esta tarea. Por detrás (o acompañando) a esta
     también se encuentra la gestión de los proyectos.         De cualquier manera podríamos colocar a la gestión
                                                               de software en dos grandes áreas, aunque cada una
     LA GESTIÓN                                                de estas tendrá sus matices, una que llamaremos
                                                               formal, y la otra ágil. Pudiendo ir de un lado a
     Como decíamos, el desarrollo de software no se reduce     otro de estos extremos e incluso quedándonos
     a la escritura de líneas de código, la gestión de los     parados en la ausencia de gestión por completo. Por
     proyectos es tan importante como el producto, o en        supuesto, la ausencia de gestión sería un desastre
     todo caso, la gestión, como la búsqueda y correcciones    seguro para nuestro proyecto.
     de errores, el diseño arquitectónico y muchos otros
     elementos hacen al todo del producto final de software.   Estos modelos de gestión tienen su historia, lo que
     Si nos faltara alguna de estas patas simplemente          le da inicio a los mismos y por lo tanto cada uno
     estaríamos jugando a hacer software y no haciendo         de ellos posee una filosofía que lo lleva a gestionar
     software realmente.                                       los proyectos de la forma en cómo lo hacen. Por
Matias Iacono
                             matias.iacono@pixelscode.com




ejemplo, los modelos de desarrollo de software más
estrictos en sentido de documentación, seguimiento
y control heredan su filosofía de procesos de
gestión que provienen de otras industrias, poniendo,
posiblemente, más el acento sobre la cosa que
se produce y tratando de controlar las variables
involucradas en dicho proceso más que en el valor
del equipo que lo produce; es por este motivo
que muchas veces hablamos de industria, ya que
solemos imaginarnos las empresas que desarrollan
software como aquellas que creaban automóviles en
serie. De cualquier manera, y tratando de matizar
esto, no debemos caer en extremismos, ya que este
pensamiento extremo dependerá de la empresa que
implemente este modelo y por otro lado, el tipo de
proyecto que estemos creando. Esto quiere decir que
muchos proyectos de carácter crítico, como software
de alto rendimiento, para control de tráfico aéreo,
manejo de redes y telecomunicaciones, entre otros,
donde se necesita realizar la mayor cantidad de
controles y verificaciones sobre el producto antes de
que este llegue a ser utilizado.


                                                        23
24




     En el área de la agilidad, por el contrario, el objetivo   orientadas al valor entregado con el producto.
     se centra principalmente en la reducción de costos         Normalmente, la primera rama se distingue por la
     innecesarios de la producción, en la entrega de            creación de documentación, fichas de seguimiento,
     productos con valor al cliente y en el valor que el        procesos escalonados y otras actividades que, sin
     equipo de producción puede otorgarle al producto           ser ni malas ni buenas, son parte de todo proceso
     que está construyendo. Por lo tanto este tipo de           que se oriente al control. Esto quiere decir que para
     formas de gestión suele eliminar el papeleo excesivo       poder saber qué pasa en cada momento dentro de
     al mismo tiempo que pretende interactuar más               un proyecto, conocer los estados de las diferentes
     de cerca con el cliente, mostrándole avances del           materias, cómo pasan de uno a otro y demás, es
     producto, o requiriéndole retroalimentación del            necesario llevar controles exhaustivos, lo que deriva
     producto de forma seguida.                                 en el uso de herramientas y documentos constantes.

     Por supuesto, y al igual que el otro polo de gestión,      Por otro lado, cuando el desarrollador se topa con
     aquí tendremos un abanico de posibilidades de              la agilidad, uno de los primeros atractivos será la
     gestión donde cada uno aplicará sus conceptos y            sugerencia de no requerir la documentación que
     prácticas, por lo que no debemos confundirnos y            se proponía en los modelos anteriores. Esto es mal
     considerar que todos los modelos ágiles, así como          interpretado fácilmente y deriva en la ausencia
     los modelos orientados al control, aplican las             absoluta de documentación, entre las que se incluirán
     mismas prácticas, aunque posiblemente sí, estén            la planificación de tareas y tiempos, documentos
     amparados por el mismo paraguas filosófico.                arquitectónicos, manuales de usuarios y muchos otros
                                                                documentos inherentes al desarrollo de software. Pero
                                                                esto es un error, un concepto de agilidad mal entendido

     ESTO NO ES                                                 y que es esgrimido por desarrolladores y gestores para

     AGILIDAD                                                   no tener que realizar las prácticas de ingeniería que
                                                                todo proyecto demanda. En este punto, la agilidad, y
     Es importante que destaquemos qué es y qué no es           dependiendo del modelo que elijamos, nos sugerirá
     agilidad, o por lo menos, algunos de los vicios que        reducir la carga documental, en la medida que esto sea
     se suelen encontrar cuando se habla de agilidad, los       posible, pero no la abolición total de cualquier pieza
     cuales han llevado a la mala interpretación y malas        de seguimiento en la construcción del producto.
     prácticas en proyectos de desarrollo de software.          Por lo tanto, cuando hablamos de agilidad, también
     Como veíamos al principio, dividimos la gestión en         hablamos de estimaciones de tiempos, documentos
     dos grandes ramas: las orientadas al control y las         y diagramas.
EL PROBLEMA DE SCRUM
COMO MODELO ÁGIL
Los modelos ágiles son muchos, variados en su           Scrum fomenta valores de
aplicación y con diferentes grados de dificultad en     profesionalismo, donde todos los
su entendimiento, de esta forma podemos encontrar       integrantes del equipo deben trabajar
nombres como Lean, Kanban, XP y otros, aunque           en conjunto para conseguir un objetivo.
Scrum posiblemente sea el que haya tenido mayor
popularización y por lo tanto se haya inmiscuido en
las empresas mucho más fácilmente.

Lamentablemente, esta popularización no hizo, en        etiquetas, declarándose agilistas y dirigiéndose al
muchos casos, más que dañar la credibilidad sobre       fracaso garantizado y, con éste, generando mala
esta herramienta y al mismo tiempo toda la idea que     fama al modelo.
rodea a la agilidad y lo que tiene para ofrecernos
en la gestión de nuestros proyectos. Este daño vino     De cualquier manera, aquellas empresas que pudieron
de la mano de malas aplicaciones del modelo o una       entender la propuesta fueron las que equilibraron
falta de entendimiento del mismo y su aplicación.       la balanza a favor de Scrum y la agilidad. No sólo
Posiblemente una de las grandes fallas de Scrum sea     aplicando los pasos propuestos sino generando un
el hecho de parecer muy simple de aplicar debido a      cambio interno en la estructura de la empresa, no
su simpleza conceptual; concepto que resulta simple     esperando que la jerarquía de la misma tome las
e incluso elegante pero que encierra grandes            decisiones sino dejando a aquellos que estaban más
complicaciones debido a la cantidad de ideas            inmiscuidos en los proyectos, que decidieran cuáles
y conceptos que se deben manejar, así como              eran los pasos a seguir; dejando que los grupos de
paradigmas y prejuicios culturales, de gestión y        desarrollo se consolidaran, limaran sus asperezas y que
personales.                                             cada miembro no fuera considerado un mero recurso,
                                                        como una máquina más plausible de ser intercambiada
Un claro ejemplo ha sido, en muchas empresas, la        en cualquier momento a otro equipo creyendo que la
adopción de los nombres propuestos por Scrum            matemática de la gestión solucionaría el problema
para las diferentes ceremonias que éste presenta,       humano; educando al cliente para que entienda que el
pero la ejecución de la gestión del modo tradicional,   proyecto de software no es una mera pieza comprada
jerarquizado, con gestiones realizadas desde las        en un supermercado y que para que el mismo tenga
cúpulas, impidiendo que los equipos se estabilicen,     éxito él también deberá participar con sus ideas, con
entre otros factores de fracaso comunes. Por lo         su visto bueno, con sugerencias y que su trabajo no se
tanto, estas empresas terminarían cambiando             reduce a firmar cheques.                                  25
26




     LOS PASOS                                              ROLES EN
     DE SCRUM                                               SCRUM

     Posiblemente lo más atractivo de Scrum es, como        Normalmente, en el desarrollo de software los
     decíamos anteriormente (y esto se suele aplicar en     equipos de desarrollo suelen estar conformados
     todos los modelos ágiles), que no se dictaminan        por personas con diferentes especialidades, y cada
     reglas metodológicas estrictas para seguir, sino       especialidad actúa sobre el proyecto en determinado
     que se pretende o se otorgan ciertas referencias       momento. Por ejemplo, los arquitectos podrán
     para que al aplicar el modelo, se opte por la mejor    plantear el diseño del producto en el inicio del
     solución. Posiblemente este es el punto más difícil    mismo, los desarrolladores crearán el código luego,
     de concebir, ya que al no contar con un manual lleno   y los encargados de realizar las pruebas sobre el
     de lineamientos rápidamente se cae en las malas        producto y detectar errores al final. Esta delimitación
     prácticas, olvidando incluso los pasos mínimos y       por áreas, especialidades y procesos se puede
     necesarios para llevar adelante el modelo.             ver más claramente en modelos de procesos de
                                                            desarrollo llamados en cascada.

                                                            Una diferencia fundamental en Scrum es que no se
                                                            realiza una distinción a nivel granular, limitándose a
                                                            sólo tres roles: el Product Owner (o dueño del producto), el
                                                            Scrum Master y el equipo propiamente dicho.
Proceso de desarrollo de software en cascada.
Este proceso es comúnmente utilizado en
metodologías orientadas al control.




EL PRODUCT                                               EL SCRUM
OWNER                                                    MASTER

El dueño del producto o Product Owner es el              El Scrum Master es una pieza fundamental dentro
representante del producto y el conocimiento de          de Scrum. Su principal labor es la de convertirse en
qué es lo que dicho producto pretende hacer, por lo      un facilitador para el equipo, intentando remover
tanto, este rol está encargado de velar por el valor     obstáculos del camino que impidan el normal
que ese producto generará, sabiendo qué partes del       avance del desarrollo del producto.
mismo pueden o no producir mayores beneficios si
éste viera la luz.                                       Comúnmente suelen surgir en el proceso de
                                                         desarrollo problemas de comunicación entre
Normalmente, se asocia a esta figura con el cliente en   el equipo y el Product Owner, o la estructura
sí mismo, pero es posible contar con la ayuda de otra    empresarial y el equipo, por lo que el Scrum Master
persona que actúe en nombre de él y se responsabilice    podrá interceder para que el proceso productivo
de las decisiones tomadas a nivel de producto.           siga un flujo normal.

El Product Owner podrá, por ejemplo, elegir              Por el contrario, el Scrum Master no es un líder
funcionalidades a quitar, o nuevas a añadir dentro       de proyectos o gestor del mismo, rol que suele ser
de la lista de funcionalidades para ese producto.        confundido fácilmente cuando este modelo es mal
Este tipo de decisiones pueden ser tomadas en base       aplicado, por lo tanto, el Scrum Master no tiene
a un mercado variable, donde lo pensado para un          permitido decidir sobre cómo realizar el producto,
producto ya no sea válido con el correr del tiempo       qué miembro del equipo hará determinada
                                                         funcionalidad, realización de estimaciones, entre
                                                         otras funciones.                                       27
28




                                                             LOS PASOS DE
     EL EQUIPO                                               SCRUM

     Por último y uno de los más importantes es el           Por último, en Scrum contamos con algunos
     equipo de desarrollo. Decimos que es uno de los         mecanismos que nos garantizarán la obtención de
     más importantes debido a que es éste el que se          cierto ritmo en el proceso productivo. Este ritmo no
     encargará de producir el producto, y sólo éste sabe     se reduce sólo a la creación de código sino también
     cuál será la mejor forma de hacerlo así como cuánto     a las estimaciones de tiempo, las interacciones con
     tiempo tomará. Esto quiere decir, por un lado,          el equipo y con el cliente.
     que un equipo Scrum deberá estar formado por
     todas las personas que sean necesarias para poder       Todo proyecto de Scrum nace con una lista de tareas
     crear este producto, las cuales deberán trabajar        a desarrollar que representan el producto en su
     conjuntamente, tomando decisiones, eligiendo            totalidad. Esta lista es comúnmente llamada Product
     arquitecturas, probando herramientas, analizando el     Backlog. Además de tener la lista de tareas, esta
     código y un largo etcétera.                             debe estar priorizada en base a las necesidades del
                                                             cliente, por lo que esta tarea de priorización suele
     Aquí es donde encontramos una diferencia                ser realizada por el Product Owner.
     fundamental y funcional sobre otras formas de
     gestión, ya que tanto arquitectos, desarrolladores,     Con nuestro Product Backlog completo, esto es,
     testers, diseñadores y demás, no esperan su turno       priorizado y estimado, iniciamos una ventana
     para actuar y poner en práctica sus conocimientos       de desarrollo que suele durar entre dos a
     sobre el producto, sino que trabajan de forma           cuatro semanas – el tiempo que elijamos será
     sinérgica entre ellos. Así, mientras el desarrollador   una constante, por lo que es importante elegir
     escribe las líneas de código para una funcionalidad,    correctamente. Esta ventana de tiempo recibe el
     el tester escribe casos de pruebas para la misma,       nombre de Sprint y es un momento donde el quipo,
     el arquitecto plantea mejores formas de manejar         seleccionando una cantidad de ítems del Product
     los flujos de información y el gestor de bases de       Backlog se pondrá en la tarea de crearlos. Por lo
     datos optimiza consultas. De esta forma todos           tanto, es vital que durante este tiempo el equipo no
     tienen noción del proyecto como una unidad y la         sea perturbado ya que su tarea es la de realizar las
     responsabilidad de su correcta finalización recae       piezas elegidas para esta iteración.
     sobre todos.
                                                             Durante el tiempo que dure el Sprint, el equipo
                                                             tendrá una reunión diaria, sólo entre ellos y el Scrum
El proceso de Scrum resulta simple, pero
encierra en sí mismo una demanda de
profesionalismo y prácticas de ingeniería que no
muchos están dispuestos a llevar adelante.




Master si fuese necesario, donde se abordarán,              entonces, nos darán una oportunidad para poder hacer
por cada integrante, tres temas. Cada uno de los            un viraje de timón sobre el proyecto y de esta forma
integrantes deberá contestar a las preguntas: - ¿Qué        alcanzar un producto que efectivamente genere algún
hice ayer? ¿Qué haré hoy? ¿Existe algún impedimento         valor para el cliente.
que no me permita trabajar?

Con estas preguntas en la mesa, todo el equipo              RESUMEN
puede saber cuál es el estado de cada uno de
los integrantes del mismo y así poder solucionar            Lo que hemos visto aquí es sólo la punta de Scrum
problemas o colaborar en determinadas situaciones.          como forma ágil de gestión. Como podemos notar,
Debemos recordar que la responsabilidad del                 queda mucho recorrido, tanto a nivel de la aplicación
producto recae sobre todos sus miembros, por lo             del modelo, como de la interacción entre el cliente
que el mantener una comunicación fluida y clara es          y el proveedor del servicio. Y es aquí donde se ven
de vital importancia.                                       las fallas en la aplicación del modelo en la vida real,
                                                            ya que muchas veces los que lo llevan a la práctica
El último paso se lleva a cabo cuando el Sprint finaliza,   suelen quedarse con la historia corta sin ahondar en
esto es, al finalizar las dos o cuatro semanas de           los detalles más importantes. De cualquier manera,
producción. En este momento es cuando se requiere           las formas ágiles de gestión ya han podido torcer
mayor soporte del Product Owner, ya que el objetivo         la media de desconfianza y se han probado como
será mostrarle lo que se ha producido en base a los         modelos válidos y útiles, por lo que se ha dejado de
ítems por los cuales el equipo se comprometió al inicio     lado la experimentación para formar parte de una
del Sprint. En este punto, el Product Owner podrá           realidad en las empresas de desarrollo de software.
validar o no cada uno de los elementos presentados,
pero más importante será que en este momento se             En siguientes artículos profundizaremos más en esta
podrá saber si lo producido coincide con las ideas          práctica, detallando cada uno de los artefactos, así
originales o con las demandas del mercado. Si tenemos       como las responsabilidades y prácticas que deberá
en cuenta que el mercado fluctúa y las necesidades          cumplir cada miembro del proyecto. Finalmente,
del mismo cambian, puede ser que en este punto el           aprenderemos sobre las herramientas de gestión que
producto deba tomar otro rumbo. Estas iteraciones           nos recomienda Scrum y cómo podemos saber del
cortas y contactos con el cliente de forma seguida,         estado y evolución del proyecto.                          29
30




     TESTING DE
     APLICACIONES
     No importa la cantidad de tiempo        COMENZANDO
     que se invierte en el diseño de
     una aplicación Android, o incluso       Al momento de crear un proyecto
     qué tan cuidadosos somos en la          Android podemos crear el Proyecto
     programación, los errores son           Android que realice el Testing. Pero
     inevitables y los errores aparecerán.   en este caso, vamos a trabajar
     En esta nota, queremos ayudar a         sobre un Proyecto Android ya
     todos los lectores de Pixels&Code       creado anteriormente, y le vamos
     a conseguir rápidamente tener           a crear su Proyecto de Testing
     algunos test de unidad, y luego         asociado. Usaremos el «Hola Mundo
     presentaremos un framework              Android», aquel que realizamos la
     para testear de forma automática        primera vez que instalamos el Kit de
     la interfaz de usuario, llamado         Desarrollo de Android. Para quienes
     Robotium.                               quieran tener ya un proyecto «Hola
                                             Mundo Android» andando de forma
                                             súper rápida (sin usar el wizard
                                             de Eclipse), en este link pueden
                                             descargar un «Hello Pixel&Code «:
                                             http://pixelscode.com/downloads/
                                             HelloPixelAndCode.zip
Mariano Salvetti
                                                                                  mariano.salvetti@pixelscode.com




CREANDO EL
PROYECTO
DE TESTING
El testing de una aplicación Android
es también una aplicación Android.
El wizard de Eclipse para un «Nuevo
Proyecto Android de Test» nos crea
un proyecto de testing y el framework
necesario, al mismo tiempo. Veamos
cómo hacer esto:

1- En Eclipse, vamos a: New > Project
> Android > Android Test Project
                                         c- Select Build Target: Seleccionamos
2- En la ventana del Wizard, le          la plataforma mínima de la aplicación,
ingresamos los siguientes valores:       en este caso Android 1.6 o superior;
a- Project                               clic en Finish.
Name: “HelloPixelAndCodeTest”, clic
en Next.                                 3- Vemos cómo el wizard nos toma
b- Select TestTarget: seleccionamos      automáticamente el Application name
“An existing Android project”, y luego   (HelloPixelAndCodeTest) y el package
seleccionamos “HelloPixelAndCode”        name, todo reflejado en el nuevo
de la lista de proyectos en nuestro      proyecto que aparece en nuestro
Workspace; clic en Next.                 Package Explorer.




                                                                                                                31
32




     CREANDO LA
     CLASE CON EL
     CASO DE TEST
     Ahora ya tenemos todos los archivos    nombre de la Actividad a testear.
     y directorios que necesitamos para     c- Sin cambiar ningún otro valor,
     crear y ejecutar una aplicación de     damos clic en Finish.
     testing, a excepción de la clase       3- Ahora, ya tenemos el archivo
     que contiene los tests (la clase de    MiPrimerTest.java en el proyecto,
     casos de prueba). Vamos a crear        que es una clase que extiende a
     dicha clase Java que contenga el       la clase para Testear Actividades,
     código que testea la Actividad y que   llamada ActivityInstrumentationTestC
     extienda una de las clases de Test     ase2<T>
     que trae Android, especialmente
     diseñada para Actividades. Nuestra     4- Abrimos el archivo MiPrimerTest.
     clase va a contener la definición de   java y veremos este código:
     cuatro métodos, de los cuales luego
     explicaremos su función.               package com.msalvetti.pixelandcode.
     Con esto en mente, creamos la clase:   helloworld.test;

     1- En Eclipse, realizamos «clic        import android.test.
     derecho» sobre el paquete              ActivityInstrumentationTestCase2;
     «com.msalvetti.pixelandcode.
     helloworld.test» del proyecto          public class MiPrimerTest extends
     «HelloPixelAndCodeTest» : New >        ActivityInstrumentationTestCase2<H
     Class                                  elloPixelAndCodeActivity> {
                                            }
     2- En la ventana del Wizard, le        ActivityInstrumentationTestCase2
     ingresamos los siguientes valores:     nos permite realizar testing funcional
     a- Name: “MiPrimerTest”.               para una sola Activity. También se
     b- Superclass:”android.test.           puede obtener la Activity inyectada que
     ActivityInstrumentationTestCase2       se está probando, llamando al método
     <HelloPixelAndCodeActivity> la         getActivity(). Y como la actividad se
     superclase está parametrizada por el   pone en marcha antes de cada test,
nos permite ver cómo la interfaz de      antes de llamar a cada método de        referencia al objeto no es nula, es
usuario está siendo probada.             test, es por eso que inicializamos      decir, si se inicializa correctamente.
5- Agregamos el constructor y el         las variables y preparamos el
método setUp() a la clase, y luego       entorno de prueba. Para este caso,      9- Ahora, el método que valida el
tres variables de clase necesarias,      inicializamos la aplicación Android     texto:
que se muestran a continuación:          a testear, recuperamos el texto que     public void testText() {
public MiPrimerTest() {                  se muestra en pantalla y el texto que   assertEquals(resourceString,(String)
super(“com.msalvetti.pixelandcode.       está en los archivos de recursos.       mView.getText());
helloworld”,HelloPixelAndCodeActivi                                              }
ty.class);                               7 - En estos momentos, es necesario     Este método testText() llamará a
}                                        que importemos lo que nos pide          un método Assert de JUnit para
protected void setUp() throws            Eclipse (el TextView y la Actividad     comprobar si el TextView se muestra
Exception {                              HelloPixelAndCodeActivity).             con el texto esperado.
super.setUp();                                                                   Para este ejemplo, la prueba
actividadTestear = this.getActivity();   8- Ahora, agregamos un método que       espera que el TextView esté
mView = (TextView) actividadTestear.     testea las precondiciones:              mostrando el recurso (la String)
findViewById(com.msalvetti.              public void testPrecondiciones() { //   que se declaró originalmente en la
pixelandcode.helloworld.R.id.            se ejecuta una sola vez este metodo.    aplicación a testear. La llamada a
textTitulo);                             assertNotNull(mView);                   assertEquals(String, String) compara
resourceString = actividadTestear.       }                                       el valor esperado, el recurso
getString(com.msalvetti.                 Aunque una prueba de precondiciones     String, con el texto mostrado por
pixelandcode.helloworld.R.string.        puede comprobar diferentes              el TextView, obtenido a partir del
hello);                                  condiciones, en esta aplicación         TextView. El test tiene éxito sólo si
}                                        sólo necesitamos comprobar si la        los textos coinciden.
private HelloPixelAndCodeActivity        aplicación sometida a prueba se
actividadTestear;                        inicializa adecuadamente y si existe    10- En este link pueden descargar el
private TextView mView;                  el TextView. Para esto, se llama al     código fuente de este proyecto para
private String resourceString;           método heredado assertNotNull(),        testear: http://pixelscode.com/
                                         pasando una referencia al TextView.     downloads/HelloPixelAndCodeTest_
6 - El método setUp() se ejecuta         La prueba tiene éxito sólo si la        simple.zip




                                                                                                                          33
34




     EJECUTANDO                              ROBOTIUM,
     EL CASO                                 TEST
     DE TEST                                 AUTOMÁTICO
                                             DE INTERFAZ
     En el Package Explorer hacemos          Robotium es un framework creado
     clic en el proyecto de testing          para implementar test automáticos
     HelloPixelAndCodeTest y                 de aplicaciones Android. Con esta
     seleccionamos Run As> Android           herramienta se puede testear
     JUnit Test, para que a continuación     cualquier tipo de aplicación
     Eclipse inicie la aplicación de         visual como Activity o Dialogs.
     testing y la aplicación sometida        Comparándolo con el mundo del
     a prueba. Luego, el framework de        desarrollo web, se podría decir que
     pruebas ejecuta los tests y reporta     Robotium es el Selenium de Android.
     los resultados a la vista JUnit de      La dinámica de trabajo con este
     Eclipse, que muestra los resultados     framework es la programación de
     de las pruebas en un panel superior,    acciones que simulen al usuario. Por
     con un resumen de los tests que se      ejemplo, se puede realizar la acción
     ejecutaron, y en un panel inferior      de realizar clic en un texto específico,
     presenta los rastros de los tests que   ingresar valores en una caja de texto
     fallaron. En este caso, los tests se    concreta o buscar un texto en una
     han ejecutado correctamente, por lo     pantalla. Realizando varias de estas
     que no hay ninguna falla reportada      acciones se puede comprobar si existe
     en la vista inferior. Ya estamos        un texto, mediante un Assert por
     familiarizados con el proyecto          ejemplo, y de esta forma validar si la
     de testing, continuemos con la          aplicación funciona bien y pasa las
     automatización de pruebas.              pruebas.
Nuestra aplicación a probar será
ampliada; modificaremos la única
Activity para que sea una simple
calculadora. Ingreso dos valores, y al
hacer clic en ‹Multiplicar› se mostrará
el resultado de multiplicarlos entre sí.
Por simplicidad se deja este ejercicio
para el lector, y queda disponible
el proyecto en el siguiente link:
http://pixelscode.com/downloads/
HelloPixelAndCode_Calculadora.zip.         >Build path->Configure Build Path       • Abrimos el archivo
Así que ahora, vamos a probar esta         y en Properties, clic en la pestaña     MiPrimerTestAutomatico.java y
mini-calculadora.                          Libraries, para agregar el jar de       veremos este código:
                                           Robotium, como se muestra en la
Para usar Robotium en un proyecto de       siguiente imagen:                       package com.msalvetti.
testing, realizamos estos pasos:                                                   pixelandcode.helloworld.test;
                                           • Dentro de nuestro proyecto de test,
• Descargar el archivo robotium-           creamos una nueva clase con un test     import android.test.
solo-3-1.jar que contiene el               de ejemplo: New->Class, derivamos       ActivityInstrumentationTestCase2;
framework desde: http://code.google.       esta clase de ActivityInstrumentatio
com/p/robotium/                            nTestCase2 , como se muestra en la      public class MiPrimerTestAutomtico
                                           captura de pantalla:                    extends ActivityInstrumentationTestC
Será necesario que tengamos un
proyecto Android con la aplicación que
deseamos testear, y como en nuestro
caso, ya creado un proyecto de Test
Android (si no, crearlo como vimos
anteriormente: File->New->Project-
>Android->Android Test Project).

• Necesitamos una referencia a
Robotium desde nuestro proyecto.
Para eso, vamos a agregar el archivo
jar: clic derecho en el proyecto-




                                                                                                                       35
36




     ase2<HelloPixelAndCodeActivity> {        nuestro caso de test, vamos a probar
     }                                        el contenido del formulario y su
     • Los métodos tearDown() y el            funcionalidad, realizando los siguientes
     constructor los creamos de la misma      cuatro pasos:
     forma que en el test con JUnit.
                                              1. Manejar los controles de entrada
     • Tenemos que instanciar un objeto       (EditFields)
     de Robotium en el método setUp(),
                                              2. Introducir los valores de nuestra
     esto lo realizaremos a través de la
                                              propia elección
     clase “Solo” del Framework. Para
     eso agregamos la siguiente variable      3. El acceso y clic al botón Multiplicar
     de clase “Solo” a nivel de clase y       4. Poner valores para verificar el
     modificamos el método setUp() así:       resultado de la multiplicación, en el
     private Solo solo; //la instancia para   campo de resultado.
     trabajar con el Robotium                 • ¿Y cómo usamos la variable privada
     protected void setUp() throws            “Solo”, dentro de nuestro Test Case?
     Exception {                              Fácil, acá tenemos unos ejemplos de
     super.setUp();                           sentencias de test, con Robotium:
     solo = new Solo(getInstrumentation(),
     getActivity());                          solo.sendKey(solo.MENU);

     }                                        solo.clickOnText(“Nuevo”);
     La clase “Solo” se utiliza para hacer
     las pruebas de instrumentación           Assert.assertTrue(solo.
     más fácil. Es compatible con los         searchText(“Crear nuevo archivo”));
     casos de prueba que se extienden
     sobre múltiples actividades. Todo        • Ahora, en nuestro test, el primer
     es manejado automáticamente por          método que ingresa valores en las
     Robotium-Solo, por eso tenemos           cajas de texto, las limpia, reingresa
     que tener una instancia por test, e      valores y luego realiza clic en el botón:
     inicializarla al comenzar las pruebas,
                                              public void testIngresoTexto() {
     en el método setUp().
                                              solo.enterText(0, “10”);
     Recordemos que, con este framework,      solo.enterText(1, “20”);
     los casos de prueba están escritos       solo.clickOnButton(“Multiplicar”);
     desde la perspectiva del usuario. En     assertTrue(solo.searchText(“200”)); }
• Ahora, vemos un método de prueba
más completo:

public void testMasCompleto() {
float primerNumero = 10;
float segundoNumero = 20;
float resultado = primerNumero *
segundoNumero;
EditText FirsteditText = (EditText)
solo.getView(R.id.EditText01);
solo.enterText(FirsteditText, String.
valueOf(primerNumero));
EditText SecondeditText = (EditText)
solo.getView(R.id.EditText02);                                                   CONCLUSIONES
solo.enterText(SecondeditText,
String.valueOf(segundoNumero));         de los EditFields , y realizará clic     Android nos ofrece un framework
solo.clickOnButton(«Multiplicar»);      en el botón Multiplicar. Al terminar     muy poderoso y fácil de usar
assertTrue(solo.searchText(String.      la ejecución, se mostrará la barra       que está bien integrado con las
valueOf(resultado)));                   verde que muestra la ejecución           herramientas de desarrollo que nos
TextView outputField = (TextView)       exitosa.                                 descargamos cuando comenzamos
solo.getView(R.id.TextView01);                                                   a desarrollar.
ArrayList currentTextViews = solo.ge    En este link pueden descargar el
tCurrentTextViews(outputField);         código fuente de este proyecto           Cómo realizar testing es una parte
assertFalse(currentTextViews.           para testear automáticamente,            importante de cualquier desarrollo;
isEmpty());                             utilizando JUnit y Robotium: http://     en esta nota realizamos una
TextView salida = (TextView)            pixelscode.com/downloads/                introducción al testing con JUnit
currentTextViews.get(0);                HelloPixelAndCodeTest_completo.zip       y les ayudamos con el puntapié
assertEquals(String.                                                             inicial, de forma rápida, para luego
valueOf(resultado), salida.getText().   El principal problema que nos            presentar una interesante forma de
toString());                            podemos encontrar es con la              automatización de casos de test,
                                        modificación de la interface de la       mediante JUnit y Robotium.
Ejecutamos con clic derecho en el       aplicación, algo habitual cuando
proyecto, Run As>Android JUnit          se está desarrollando. Si ocurriese      Con este framework podemos
Test. Si las cosas salen bien, el       alguna modificación en algún texto,      automatizar nuestros tests y
Emulador carga la aplicación, y         los test afectados se deberían cambiar   ejecutarlos diariamente a medida
entrará automáticamente los valores     modificándolos a los nuevos textos.      que vamos desarrollando.




                                                                                                                        37
38




     LAS LEYES DE
     PROGRAMACIÓN
     DE TAYLOR
     (PARTE II)
     Este mes continuamos por la senda iniciada en la
     edición anterior, tomando las leyes de Taylor como
     faro. El Sistema Operativo UNIX y sus herederos
     ofrecen a sus usuarios una importante cantidad de
     herramientas, que en mano de un programador que
     tenga un conocimiento mínimo de cómo trabajar
     con ellas se vuelven extremadamente poderosas,
     permitiendo hacer más en menos tiempo. En esta
     ocasión nos vamos a centrar en un programita muy
     interesante: “sed” (stream editor). Sed implementa
     un mini-lenguaje de programación, que permite
     automatizar transformaciones a un archivo de texto,
     de forma similar a como ya vimos con “tr”. Este
     último está pensado para realizar sustituciones
     sencillas de un caracter por otro, mediante una
     serie de reglas que se le establecen. En cambio,
     sed puede realizar acciones mucho más complejas,
     gracias a su soporte de expresiones regulares.
     Veamos cómo hacerlo.
Juan Gutmann
juan.gutmann@pixelscode.com




                              39
40




     TAYLOR, SIEMPRE                                        USOS SIMPLES
     PRESENTE                                               DE SED
     Pero primero, recordemos el enunciado del misterioso   La mayoría de los casos en los que suele utilizarse
     Taylor, que como ya mencionamos en la primera          sed son sencillos, y por lo tanto pueden entenderse
     parte, deben leerse de abajo hacia arriba, es decir,   a simple vista. No obstante, este minilenguaje es lo
     en orden de complejidad decreciente.                   suficientemente complejo y poderoso como para que un
                                                            script más largo y complicado sea lo suficientemente
     “Nunca programe en ‘C’ si puede hacerlo en ‘awk’;      críptico para que sólo un usuario avanzado del mismo
     Nunca lo haga en ‘awk’ si ‘sed’ puede manejarlo;       pueda interpretarlo rápidamente. Para colmo, la
     Nunca use ‘sed’ cuando ‘tr’ puede hacer el trabajo;    documentación más a mano (las páginas de man) no
     Nunca invoque ‘tr’ cuando ‘cat’ sea suficiente;        es de lo más accesible y completa. Por lo general, en
     Evite usar ‘cat’ siempre que sea posible.”             el trabajo con sed, como dijo un gran poeta, “se hace
                                                            camino al andar”.
     En nuestro “episodio anterior” aprendimos las
     distintas posibilidades que nos ofrecen cat y tr,      El uso más común de sed es equivalente a la
     además de cubrir otras herramientas que permiten       función “Buscar y Reemplazar” que ofrecen muchos
     automatizar el tratamiento de textos, como cut.        editores de texto. La diferencia es que con ellos
     Siguiendo este orden, entonces, le toca el turno a     hay que hacerlo en forma interactiva, mientras que
     sed. Escrito originalmente por Lee McMahon durante     sed (como casi todo este tipo de herramientas de
     la década del 70, cuando se desempeñaba en los         consola en UNIX) está pensado para operar en forma
     Bell Labs, cuna del UNIX original, ha sido portado a   automatizada. Para hacer un “search & replace” de
     una infinidad de plataformas, aunque sigue siendo      sed, entonces, escribimos:
     un componente central de los clones de UNIX,
     como GNU/Linux y *BSD. Inclusive, se dice que el       sed s/cadena_a_reemplazar/nueva_cadena/
     gran Larry Wall, experto en sed, se inspiró en esta    archivo_original.txt > archivo_nuevo.txt
     herramienta y en awk -que veremos en nuestra
     próxima entrega- al crear Perl, un lenguaje de         La “/” (barra, o en inglés “slash”), que se emplea como
     scripting extremadamente poderoso y muy popular        delimitador, es solamente una convención, ya que
     en nuestros tiempos, particularmente entre los         sed toma al caracter que sigue inmediatamente a la
     sysadmins.                                             “s” (comando que ordena el reemplazo) como tal. Si
                                                            se pretende reemplazar una cadena que contenga la
barra (como una ruta de archivos en UNIX), es buena         Entre los diversos caracteres especiales de las
idea optar por otro separador, aunque muchos optan          expresiones, como aquellos empleados para especificar
por usar el caracter de escape “”. Otras elecciones        las expresiones regulares (paréntesis, corchetes,
comunes como separador son el underscore “_”, el pipe       asterisco, punto, etc.) se destaca el ampersand “&”,
“|”, o los dos puntos “:”.                                  que representa la cadena encontrada en base a la
                                                            expresión de búsqueda. Esto puede ser muy útil. Es
La expresión del ejemplo anterior, tal como fue escrita,    fácil reemplazar “hola” por “_hola_” cuando conocemos
sólo reemplaza la primera ocurrencia de la cadena a         exactamente la palabra que estamos buscando, pero
reemplazar especificada. Si se quiere sustituir todas las   ¿qué ocurre cuando desconocemos la totalidad de la
ocurrencias, debe indicarse que la orden “s” es global,     cadena a procesar? Veamos:
agregando luego de la cadena nueva un delimitador y la
letra “g”, de esta manera:                                  echo ‹agrego underscores› | sed ‹s/[a-z]*/_&_/g›
                                                            _agrego_ _underscores_
sed ‘s/cadena_a_reemplazar/nueva_cadena/g’
archivo_original.txt > archivo_nuevo.txt                    Si alguno de los caracteres especiales que se emplean
                                                            para especificar la expresión regular de búsqueda se
Aquí también encerramos la expresión entre comillas         encuentra dentro de la cadena a matchear, debemos
simples, algo imprescindible si es que la cadena            “escaparlo” con una contrabarra “” (backslash), como
a reemplazar o la nueva contienen caracteres                se hace en muchos lenguajes emparentados con UNIX
especiales, como el espacio en blanco. Para hacer           (como los scripts de shell) para que sed comprenda
una prueba sin necesidad de contar con un archivo           que nos estamos refiriendo literalmente a ese caracter,
de texto, podemos hacerlo con el comando “echo” y           y no lo intreprete como un caracter especial:
un pipe, tal como vimos la vez pasada:
                                                            echo ‹agrego [underscores]› | sed ‹s/[[a-
echo «Hola Juan» | sed ‘s/Hola/Buen día/’                   z]*]/_&_/›
                                                            agrego _[underscores]_
Da como resultado:
                                                            Noten el uso de la contrabarra para escapar los
Buen día Juan                                               corchetes, provocando que de las dos palabras
                                                            que componen el string a procesar solamente sea           41
42




                                                               SED SCRIPTS
     modificada aquella que está encerrada entre los           Podemos escribir con el editor de nuestra preferencia
     caracteres “[“ y “]”.                                     un “sed script” y luego indicarle a sed con el switch
                                                               -f que lea los comandos directamente de ese archivo.
     Ahora, si tenemos varias palabras entre corchetes,        Veamos un ejemplo. Editamos un archivo que llamamos
     podemos recurrir al modificador global “g” para           “descastellaniza.sed”, e ingresamos lo siguiente:
     sustituirlas a todas. Pero si quisiéramos omitir
     el reemplazo de la primera ocurrencia, podemos            # Este script elimina los acentos y la eñe
     indicarle a sed que lo haga sólo de la segunda            s/á/a/g
     ocurrencia en adelante, de esta forma:                    s/é/e/g
                                                               s/í/i/g
     echo ‘[agrego] [underscores] [parcial]’ | sed ‘s/        s/ó/o/g
     [[a-z]*]/_&_/2g’                                         s/ú/u/g
     [agrego] _[underscores]_ _[parcial]_                      s/ñ/n/g
                                                               s/Á/A/g
     Podemos “encadenar” más de un reemplazo de                s/É/E/g
     dos maneras. La primera es la obvia para todos los        s/Í/I/g
     usuarios de consola:                                      s/Ó/O/g
     echo “Hola Juan. Chau.” | sed “s/Hola/Buen día”/          s/Ú/U/g
     | sed “s/Chau/Hasta Luego/”
     Buen día Juan. Hasta Luego.                               Cada comando sed debe escribirse en una línea
                                                               separada. Si deseamos ingresar comentarios, los
     En lugar de usar un pipe, podemos pasarle a sed           prefijamos con el caracter numeral “#”. Ahora
     múltiples patrones, aclarándole delante de cada uno que   editamos un archivo que bautizamos “prueba.txt”
     se trata de un juego de órdenes a través del switch -e:   con el siguiente contenido:

     echo “Hola Juan. Chau.” | sed -e “s/Hola/Buen             “En la ortografía del idioma español, se denomina
     día”/ -e “s/Chau/Hasta Luego/”                            acento diacrítico a la tilde que se emplea para
     Buen día Juan. Hasta Luego.                               distinguir significados en pares de palabras,
     Por supuesto, si las órdenes a encadenar son              habitualmente monosílabas, de las cuales una es
     muchas, esto ya es poco práctico. Hay una forma           regularmente tónica, mientras que la otra átona en
     mejor de resolverlo.                                      el habla, marcando el acento de la tónica.”
Lo probamos de esta forma:                                drwxr-xr-x 3 root root 4096 2011-09-30 02:31 boot
                                                          drwxr-xr-x 2 root root 4096 2010-12-14 21:53 cdrom
sed -f descastellaniza.sed prueba.txt                     drwxr-xr-x 19 root root 3540 2012-03-15 17:54 dev
“En la ortografia del idioma espanol, se denomina
acento diacritico a la tilde que se emplea para           Cabe destacar que con esta línea estamos logrando
distinguir significados en pares de palabras,             lo mismo que si hubiéramos escrito:
habitualmente monosilabas, de las cuales una es
regularmente tonica, mientras que la otra atona en        ls -l / | head -n 5
el habla, marcando el acento de la tonica.”
                                                          Veamos otro comando de sed, “q” (quit) que nos
                                                          permite obtener idéntico resultado:
TRABAJANDO
CON RANGOS                                                ls -l / | sed “5 q”

Una posibilidad útil es decirle a sed sobre qué líneas    Esto se interpreta como “luego de procesar la quinta
tiene que aplicar las órdenes recibidas. Esto puede       línea, termine la ejecución.”
hacerse escribiendo directamente el número de
línea a procesar, en el caso de que sea una sola, o
especificando un rango desde-hasta, en la forma “N,M”.    OTROS
Probemos esta funcionalidad en conjunción con el          COMANDOS
switch -n, que le dice a sed que por defecto no envíe
a standard output los patrones “matcheados”, y de         Hay más instrucciones útiles. La “a” de add, agrega
paso aprendemos un nuevo comando (parece mentira,         una línea con el texto que se le indique tras el patrón
pero hasta ahora usamos solamente el comando de           especificado:
búsqueda “s”, o “substitute”). La instrucción “p” de
print, se usa en conjunto con el switch -n para indicar   echo ‘/* Comentario de código */’ | sed ‘//*/ an’
que el rango especificado sí debe imprimirse.
                                                          Aquí se agrega una línea en blanco (recordemos que
ls -l / | sed -n “1,5 p”                                  “n” equivale a NEWLINE) luego de cada línea que
total 108                                                 contenga el principio de un comentario escrito en la
drwxr-xr-x 2 root root 4096 2012-03-15 18:04 bin          forma “/* ... */”. Para ello, basta con especificar el    43
44




     patrón del principio del comentario (/*), pero como        echo ‘// Comentario de código’ | sed ‘//// c’
     tanto la barra como el asterisco son meta-caracteres,
     es necesario escaparlos con la contrabarra “”. En         Para esto mismo es también útil el comando “d”
     vez de agregar texto al final del patrón encontrado,       (delete) que borra las líneas que coincidan con la
     puede insertarse texto en una línea previa usando          expresión especificada:
     “i” (insert) en vez de “a”. Si quisiéramos agregar
     una línea antes y otra después del patrón, podemos         sed ‘/cadena_o_expresion_regular/d’
     agrupar los comandos, encerrándolos entre llaves “{“
     y “}”. Claro que aquí hay que tener en cuenta algo que     Es común el empleo de la orden “d” en conjunto con
     aclaramos antes: cada comando sed debe estar en            los rangos que vimos antes. Es posible borrar las
     una única línea, y eso incluye tanto las llaves como los   primeras 10 líneas de un archivo de esta manera:
     comandos agrupados en su interior. Para facilitar la
     escritura de este tipo de scripts sed, es conveniente      sed ‘1,10d’
     editarlos y grabarlos, para invocarlos posteriormente
     con el switch -f, como hicimos antes.
                                                                ALGUNOS
     # Agrega líneas antes y después de un comentario           EJEMPLOS
     //*/ {                                                   ÚTILES
     a
     n                                                         Siempre es bueno ver la aplicación de lo aprendido
     i                                                         en algo práctico. Aquí van algunos “one-liners”
     n                                                         útiles con sed. Debe tenerse en cuenta que hacen
     }                                                          un uso más avanzado de las expresiones regulares
                                                                (un terreno complejo y fascinante por su utilidad,
     echo “/* Comentario de código */” | sed -f coment.         que amerita una nota en sí mismo) que las aquí
     sed                                                        mostradas. Por ejemplo, se incluyen los meta-
                                                                caracteres “^” (que representa el comienzo de una
     /* Comentario de código */                                 línea) y “$” (que representa el final de la misma).

     Otra posibilidad es cambiar la línea donde se encuentre    Eliminar el espacio en blanco (espacios y
     el patrón con “c” (change) por el texto ingresado a        tabuladores) al principio de una línea
     continuación de la orden, o ninguno si queremos            sed ‘s/^[ t]*//’
     eliminarlo. Para eliminar todas las líneas de comentario
     prefijadas con una doble barra (//) podemos usar:          Ídem, pero al final de una línea:
sed ‘s/[ t]*$//’

Ídem, pero tanto al principio como al final:
sed ‘s/^[ t]*//;s/[ t]*$//’

Imprimir las líneas que contengan una expresión
regular (igual que “grep”)
sed -n ‘/regexp/p’

Eliminar todos los tags HTML de un archivo:
sed -e ‘s/<[^>]*>//g’ index.html




... Y HASTA
AQUÍ LLEGAMOS
Aunque parezca demasiada información para una sola
herramienta, lo cierto es que apenas hemos logrado
rascar la superficie de lo que sed es capaz de hacer.
Utilizando los comandos que vimos en conjunto,
más otras funciones que por razones de espacio
tuvimos que dejar afuera, se pueden lograr cosas muy
interesantes. Es que para cubrir sed en su totalidad,
al igual que para awk (al que dedicaremos la tercera
parte de esta serie) no alcanzan unas pocas páginas,
e incluso hay libros enteros escritos sobre el tema,
tanto digitales como en papel. Por lo tanto, dejamos en
las manos de los lectores el seguir profundizando sus
conocimientos. Como se dice en el ambiente UNIXERO,
el mejor administrador o desarrollador es aquel que
adquiere la mayoría de sus conocimientos por la vía de
la práctica y la experimentación.                         45
CHOQUE DE
        GIGANTES: FACEBOOK
        VS GOOGLE+


WEB 2.0 Y
EL NUEVO
CIBERESPACIO
En los últimos tiempos se ha producido un notable
cambio en el ciberespacio. A diferencia de los
primeros tiempos de la web, ha comenzado a gestarse
un fenómeno de masas al que suele referirse como
Web 2.0. No más páginas que brinden información o
servicios a usuarios pasivos, sino una transición que
se ha dado de aplicaciones comunes y tradicionales
hacia utilidades que funcionan a través de internet,
específicamente la web, y todas ellas enfocadas al
usuario final. Se trata de aplicaciones que generen
colaboración y de servicios que reemplacen las
aplicaciones de escritorio dando en todos los casos
un papel activo a ese mismo usuario final.

Podemos mencionar como algunos ejemplos los
blogs, las wikis (especialmente la más conocida del
mundo, Wikipedia) y una vasta gama de sitios en los
cuales la presencia del usuario y su feedback es y
serán esenciales. Y de todas las clases de aplicaciones
que podemos referir, probablemente, las que más
encarnan este nuevo espíritu de la red son las llamadas
redes sociales. YouTube, Twitter, Orkut: todas ellas se
nutren de los usuarios y son ellos los que brindan el
contenido a la red, no la red la que se los provee a ellos
en su tradicional rol de consumidores pasivos de la
información. Subiendo el video que realizó, comentando
un suceso o actualizando su perfil, el usuario es el
creador de su propio rostro de cara al mundo.
Gabriel Gaitano Ornia
gabriel.gaitanoornia@pixelscode.com




                                        47
48



     Es aquí cuando mencionamos al fin a la red social más
     conocida, Facebook. En ella se resume la web de hecho
     para muchos usuarios, y desde sus humildes orígenes
     a la fecha ha crecido exponencialmente en cantidad de
     usuarios y, sobre todo, en participación de los mismos.
     Y eso es la clave de su éxito, más allá de sus cualidades
     técnicas, ya que para toda red social la participación
     de sus usuarios es fundamental, la sangre que le da
     vida. Porque, ¿qué es una red social sin tráfico de
     información entre usuarios, sean estas opiniones, fotos,
     videos u otros recursos? La experiencia y la lógica nos
     dicen que nada en absoluto. Por eso, Facebook creció a
     pesar de que muchos usuarios se quejaban (y lo siguen
     haciendo) sobre aspectos fallidos como ser la interfaz,
     la privacidad, los frecuentes cambios de apariencia,
     etc. Simplemente “hay que estar ahí” a fin de mantener
     el contacto, y ese efecto de masa crítica constituye su
     bien más preciado y, por cierto, más envidiado por el
     resto de los jugadores de la red.
Ahora bien, la empresa líder de Internet es sin duda        a través de la creación de un sitio donde vincular gente
la omnipresente Google, dueña y señora de todos los         y sus historias. De todos modos, el principal fundador
caminos. Es muy sabido que si no está en Google             y actual líder de la empresa, Mark Zuckerberg, ha
o, mejor dicho, en sus búsquedas, no existe – como          denostado la película afirmando: «Es divertido lo que se
afirma la sabiduría popular de la red. Sin embargo,         han empeñado en mostrar de forma acertada, porque
el crecimiento de Facebook ha sido tan firme que la         todas las camisetas y todas las camperas que salen en
importancia de su porción de torta se ha tornado, a la      la película, son camisetas y camperas que tengo. Hay
vez, atractiva y amenazante para Google, la cual con las    otras cosas que hicieron bien pero otras, en cambio,
compras de YouTube y Orkut inició su propia avanzada        que hicieron mal. Lo que peor está es el principio de la
en el terreno de las redes sociales, con notable éxito      película. Empieza con una chica que nunca existió en la
en ambas. Sin embargo, nunca logró hasta este               vida real y que en teoría me deja.
momento desbancar en su propio terreno a Facebook y
los intentos de clonarla dentro del mundo Google han        Algo que ha pasado en la vida real muchas veces,»
resultado sonoros fracasos.                                 agrega mordazmente. «Parece que la única razón por la
                                                            que quería hacer Facebook era porque quería conocer
En el mundo de los negocios, y especialmente de             chicas, o porque quería entrar en alguna institución
Internet y la tecnología, no avanzar es retroceder y        social. Creo que eso es bastante significativo de cómo
retroceder es a la larga morir. Por eso está planteado      la gente que hace películas nos ve a los que estamos
el escenario para una lucha de gigantes entre               creando cosas en Silicon Valley. Parece que no se dan
Facebook y Google, de la mano de la más nueva               cuenta que hay gente que construye cosas porque les
creación de esta última: Google+, su gran apuesta           gusta construir cosas,» concluye su análisis el líder
por el control del ciberespacio.                            de Facebook. En definitiva, lo realmente cierto es que
                                                            tras unos comienzos mínimos como sitio de encuentro
Este es, probablemente, el momento para “triunfar o         entre estudiantes de la universidad estadounidense de
morir” para Google, al menos para las aspiraciones          Harvard, Facebook se expandió al mundo entero.
del gigante en los medios sociales. Facebook ya está
suficientemente establecido en sí mismo como el             Con un formato en general fácil de entender y
líder sin disputa entre las redes sociales, y por cierto    manejar por no expertos, Facebook es una forma
está bien encaminado en su meta de entretejerse a sí        sencilla de mantenerse en contacto y compartir toda
mismo en la mismísima “tela” de la red de redes. Si         clase de cosas con amigos, sean videos, comentarios
Google falla en este lance, es posible que ya no tenga      o juegos. Con muy buena visión de negocio, los
una segunda oportunidad para volver a luchar. La            directivos de la red social han liberado una API que
pregunta en la mente de todos es si Google al fin se        permite a terceros invertir en aplicaciones incluso
tornará “social” y tendrá éxito en desafiar a su rival.     con fines lucrativos, transformando así a Facebook
                                                            en un vehículo donde muchos generadores de
                                                            contenido se encuentran con usuarios de todo tipo.


Y EN ESTA                                                   Finalmente, en los últimos tiempos ha empezado
ESQUINA...                                                  a incrementarse el número de empresas deseosas
                                                            de tener presencia en Internet a través de lo que
Los contrincantes tienen al observarlos en detalle          Facebook puede proporcionarles: comunicación y
muchas similitudes producto, en muchos casos, de            una magnífica vidriera al mundo.
la observación del rival y de los comunes objetivos.
Y también no menos significativas diferencias
provenientes de las diferentes etapas de evolución
y ambientes corporativos.

La historia de Facebook es en general bien conocida,
habiendo tenido incluso su toque de épica con la
película The Social Network. En ella se muestra a un
grupo de jóvenes emprendedores que, tras muchas
vicisitudes, logran quebrar su relativo ostracismo social                                                              49
Pixelscode 2012 04
Pixelscode 2012 04
Pixelscode 2012 04
Pixelscode 2012 04
Pixelscode 2012 04

Más contenido relacionado

La actualidad más candente

Historia de power poin para el profesor tim
Historia de power poin para el profesor timHistoria de power poin para el profesor tim
Historia de power poin para el profesor timFer Vanegas
 
Historia de sistema de operativos de windows 2013-2014
Historia de  sistema de operativos de windows 2013-2014Historia de  sistema de operativos de windows 2013-2014
Historia de sistema de operativos de windows 2013-2014ITES SAN GABRIEL
 
Origen del-power-point
Origen del-power-pointOrigen del-power-point
Origen del-power-pointTaniaJ94
 
1ST AVANCE PROYECTO
 1ST AVANCE PROYECTO 1ST AVANCE PROYECTO
1ST AVANCE PROYECTOLuiiz Faviier
 
Proyecto sistemas
Proyecto sistemasProyecto sistemas
Proyecto sistemaseliasesb
 
Presentaciones digitales
Presentaciones digitalesPresentaciones digitales
Presentaciones digitalesJosehchavez1
 
Anexo 11 actividad 3 sistemas operativos en red
Anexo 11 actividad 3 sistemas operativos en redAnexo 11 actividad 3 sistemas operativos en red
Anexo 11 actividad 3 sistemas operativos en redEdgar Mtz
 
Presentacion Powerpoint samuel alvarado diaz
Presentacion Powerpoint samuel alvarado diazPresentacion Powerpoint samuel alvarado diaz
Presentacion Powerpoint samuel alvarado diazSamuel Ard
 
Historia de PowerPoint
Historia de PowerPointHistoria de PowerPoint
Historia de PowerPointleopt
 
Microsoft power point
Microsoft power pointMicrosoft power point
Microsoft power pointbinky789
 

La actualidad más candente (16)

Presentación1
Presentación1Presentación1
Presentación1
 
Historia de power poin para el profesor tim
Historia de power poin para el profesor timHistoria de power poin para el profesor tim
Historia de power poin para el profesor tim
 
Informe 3 Control de Operaciones Mineras
Informe 3 Control de Operaciones MinerasInforme 3 Control de Operaciones Mineras
Informe 3 Control de Operaciones Mineras
 
Gabriel rojas
Gabriel rojasGabriel rojas
Gabriel rojas
 
Historia de sistema de operativos de windows 2013-2014
Historia de  sistema de operativos de windows 2013-2014Historia de  sistema de operativos de windows 2013-2014
Historia de sistema de operativos de windows 2013-2014
 
Origen del-power-point
Origen del-power-pointOrigen del-power-point
Origen del-power-point
 
HISTORIA DE POWERPOINT. 11
HISTORIA DE POWERPOINT.  11HISTORIA DE POWERPOINT.  11
HISTORIA DE POWERPOINT. 11
 
1ST AVANCE PROYECTO
 1ST AVANCE PROYECTO 1ST AVANCE PROYECTO
1ST AVANCE PROYECTO
 
Proyecto sistemas
Proyecto sistemasProyecto sistemas
Proyecto sistemas
 
Presentaciones digitales
Presentaciones digitalesPresentaciones digitales
Presentaciones digitales
 
powerpoint
powerpointpowerpoint
powerpoint
 
Anexo 11 actividad 3 sistemas operativos en red
Anexo 11 actividad 3 sistemas operativos en redAnexo 11 actividad 3 sistemas operativos en red
Anexo 11 actividad 3 sistemas operativos en red
 
Presentacion Powerpoint samuel alvarado diaz
Presentacion Powerpoint samuel alvarado diazPresentacion Powerpoint samuel alvarado diaz
Presentacion Powerpoint samuel alvarado diaz
 
Historia de PowerPoint
Historia de PowerPointHistoria de PowerPoint
Historia de PowerPoint
 
Comparacion de sisitemas operativos
Comparacion de sisitemas operativosComparacion de sisitemas operativos
Comparacion de sisitemas operativos
 
Microsoft power point
Microsoft power pointMicrosoft power point
Microsoft power point
 

Similar a Pixelscode 2012 04

Similar a Pixelscode 2012 04 (20)

Componentes de la infraestructura pdf 2
Componentes de la infraestructura pdf 2Componentes de la infraestructura pdf 2
Componentes de la infraestructura pdf 2
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Sistemas operativos if04 t1 f2
Sistemas operativos if04 t1 f2Sistemas operativos if04 t1 f2
Sistemas operativos if04 t1 f2
 
Windows 7
Windows 7Windows 7
Windows 7
 
TEMAS RELACIONADOS WEB2
TEMAS RELACIONADOS WEB2TEMAS RELACIONADOS WEB2
TEMAS RELACIONADOS WEB2
 
como ha ido evolucionando el software...
como ha ido evolucionando el software... como ha ido evolucionando el software...
como ha ido evolucionando el software...
 
Arquitectura de hardware
Arquitectura de hardwareArquitectura de hardware
Arquitectura de hardware
 
Funkschau 2013-español
Funkschau 2013-españolFunkschau 2013-español
Funkschau 2013-español
 
21712680 Cloud Computing
21712680 Cloud Computing21712680 Cloud Computing
21712680 Cloud Computing
 
Web2 y nube
Web2 y nubeWeb2 y nube
Web2 y nube
 
Nociones básicas alrededor de la web 2.0
Nociones básicas alrededor de la web 2.0Nociones básicas alrededor de la web 2.0
Nociones básicas alrededor de la web 2.0
 
Talle de evaluacion en word
Talle de evaluacion en wordTalle de evaluacion en word
Talle de evaluacion en word
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
computación en la nube
computación en la nube computación en la nube
computación en la nube
 
Diapositivas software en la actualidad
Diapositivas software en la actualidadDiapositivas software en la actualidad
Diapositivas software en la actualidad
 
Nociones básicas alrededor de la web 2.0-
 Nociones básicas alrededor de la web 2.0-  Nociones básicas alrededor de la web 2.0-
Nociones básicas alrededor de la web 2.0-
 
TIC
TICTIC
TIC
 

Pixelscode 2012 04

  • 1. 1
  • 2. 2 SUMARIO ENTRY POINT 4 INTRODUCCIÓN A LAS BASES DE DATOS RELACIONALES(XII) 6 PROYECTO #CODE: PANEL DE CONTROL FEROZO 14 DESARROLLO DE SOFTWARE ÁGIL CON SCRUM 22 TESTING DE APLICACIONES 30 LAS LEYES DE PROGRAMACIÓN DE TAYLOR (PARTE II) 40 CHOQUE DE GIGANTES: F ACEBOOK VS GOOGLE+ 48 Las opiniones expresadas en los artículos son exclusiva responsabilidad de sus autores y no coinciden necesariamente con la opinión de Dattatec.com SRL.
  • 3. STAFF DIRECTORA Y JEFA DE REDACCIÓN Débora Orué COLUMNISTAS Gabriel Walter Gaitano Ornia Juan Gutmann Mariano Salvetti Matías Iácono Roxana Miguel DISEÑO EDITORIAL Y CREATIVIDAD www.americanbread.net Arte de tapa: Esteban Paniagua COMERCIALIZACIÓN DATTATEC.COM SRL Córdoba 3753, Rosario, Santa fe www.dattatec.com REDACCIÓN lectores@pixelscode.com DATOS DE CONTACTO Dirección comercial: publicidad@pixelscode.com 3
  • 4. 4 ENTRY POINT ENTRY POINT GADGETS: SEGURIDAD E INTERNET Y, finalmente, la empresa de la manzana lo hizo Luego de las películas le llega el turno a los libros. de nuevo: Apple presentó en sociedad una nueva Un importante grupo de casas editoriales de EE.UU. versión de su popular tableta iPad, largamente y Europa ha apuntado su artillería contra el sitio esperada por el aficionado a la tecnología. Library.nu, que era considerado como un formidable reservorio de ebooks y que, con una modalidad Equipada con un procesador más rápido, dotada similar a Megaupload, alcanzaba una recaudación con tecnología 4G, es considerada una verdadera en publicidad de más de 10 millones de dólares. revolución. Esta es la tercera versión que llega a las vitrinas, con la que espera conservar el liderazgo En este sitio los usuarios subían sus datos y recibían del mercado que le es intensamente disputado por un link que podían compartir con sus otros contactos. empresas como Amazon y Samsung, entre otras. Aún Los servicios eran utilizados generalmente para el no se la ha liberado en nuestro país, pero ya hay gran alojamiento de libros digitales que, de este modo, expectativa por su desembarco en estas playas. podían ser compartidos o leídos en formato PDF . El sitio ha sido dejado inoperativo por requisitoria judicial, dejando en claro que la batalla por el modelo de comercialización y compartición de los medios por la red no ha hecho más que empezar.
  • 5. Gabriel Gaitano Ornia gabriel.gaitanoornia@pixelscode.com WEB PARA IT NEWS: CONOCER: A pesar de estar fuertemente orientada a los productos Problemas con el nuevo Windows 8 Microsoft, si nuestro trabajo nos lleva a utilizarlos como developers tenemos un excelente Microsoft había, sin duda, imaginado que algunos recurso disponible para utilizar en el sitio http:// usuarios encontrarían la transición y cambio desde www.codeproject.com. el actual producto líder, Windows 7, a su planeado sucesor Windows 8 como algo desafiante. Pero es poco Aquí vamos a encontrar una sabrosa combinación probable que estuviera preparada para la reacción de de artículos, Blogs técnicos con datos de su propia comunidad base. Esta se ha manifestado consultas, trucos interesantes de programación en el Windows 8 Consumer Preview, o revisión inicial y, como no podía faltar, un foro de discusión, de consumidores. Especialmente denostadas en los así como un repositorio de preguntas donde comentarios de los usuarios han sido la nueva interfaz podemos plantear nuestras propias dudas. C#, estilo tablet, llamada Metro y concebida para competir ASP .NET y otras tecnologías de la empresa de con el popular iPad de Apple; y la desaparición del Redmond aparecen en estos medios con abundante viejo y querido botón de Inicio. De hecho, muchos información práctica y muy útil en nuestro trabajo usuarios han señalado que el producto entero es un con esas tecnologías. “substancial paso hacia atrás”. Las opciones para Microsoft son, ahora, demorar el producto para tratar de suavizar los cambios, por ejemplo, haciendo la nueva interfaz optativa (salvo para tabletas y teléfonos) o seguir adelante confiando que el usuario acabará por acostumbrarse a los cambios. Que esta vez son mucho más de lo acostumbrado. 5
  • 6. 6 INTRODUCCIÓN A LAS BASES DE DATOS RELACIONALES(XII) Hace unas semanas, un lector nos escribía Ni hablar si lo comparamos contra un gran servidor consultándonos acerca de la posibilidad de trabajar corporativo, donde normalmente corre el software con una base de datos relacional en una aplicación de base de datos relacional en las empresas para smartphones. Esta es una pregunta que se medianas y grandes. ¿Esto significa que tenemos escucha cada vez más en los últimos tiempos. que renunciar a programar como más nos gusta, Cuando se desarrolla para dispositivos embebidos, para complicarnos la existencia almacenando la ya sean equipos muy pequeños y específicos (como información de otra manera? Afortunadamente, no. un controlador de maquinaria industrial) o más Aunque tendremos que prescindir de bases potentes y voluminosos y versátiles -smartphones o tablets- flexibles, como lo es PostgreSQL, existen alternativas nos encontraremos con una situación en la que pensadas para estos casos que permiten trabajar necesitamos hacer mucho con pocos recursos. La con un motor relacional lo suficientemente funcional cantidad de memoria y el poder de procesamiento como para satisfacer las necesidades de cualquier del CPU de este tipo de aparatos son más bien aplicación escrita para este tipo de plataformas. Aquí limitados, en comparación con una PC hogareña. presentamos una de ellas: SQLite.
  • 8. 8 CARACTERÍSTICAS DE SQLITE SQLite no es un motor de base de para su empleo en dispositivos datos relacional, aunque trabaja móviles y embebidos, ya que al no de forma idéntica a uno. Ocurre existir un motor propiamente dicho, que no se trata de un programa (o el empleo de la base de datos tiene conjunto de programas) “servidor”, costo cero en recursos, ya que no que se encuentra corriendo existe un servidor que requiera de permanentemente (como un memoria RAM, espacio en el sistema demonio), atendiendo peticiones de archivos y ciclos de CPU para en un puerto de red. En cambio, funcionar. Los recursos consumidos toma la forma de una pequeña dependerán exclusivamente de librería desarrollada en lenguaje la forma en la que programemos C. Sus principales virtudes están nuestro aplicativo. Para su pequeño bien descriptas en la página web “footprint”, SQLite es notablemente del proyecto, [http://sqlite.org/]: flexible. Aunque debemos renunciar es “self-contained” (no posee al empleo de Stored Functions dependencias de otras librerías), (los Procedimientos Almacenados, “serverless” (según acabamos de que nos vienen dando tan buenos describir, no requiere de un proceso resultados con PostGres), sí cuenta ejecutándose en forma constante), con la posibilidad de crear Triggers, “zero configuration” (no requiere aunque su funcionalidad -claro realizar tareas de instalación ni está- es acotada. SQLite corre en configuración) y “transactional” prácticamente cualquier plataforma (transaccional; como nuestros para la que exista un compilador de lectores ya saben, esto quiere decir lenguaje C, y lo mejor de todo es que que pueden agruparse una serie de para programar software que la utilice cambios realizados a la información no nos encontramos limitados a este contenida para que sean confirmados mismo lenguaje, sino que podemos o deshechos en conjunto en el caso de hacerlo en casi cualquier tecnología existir algún tipo de error). Al escribir de desarrollo que se nos ocurra: una aplicación que trabaje con ella, C++, Java, JavaScript, Lisp, Perl, podemos leer y escribir datos en un PHP Python, Ruby y Tcl son apenas , archivo “base”. Por ello es apropiada algunos de ellos.
  • 9. ORÍGENES DE SQLITE La librería SQLite fue creada por el una especie de “wrapper” de gdbm, A esta altura del proyecto, miles de programador norteamericano Richard que le permitía escribir en SQL los usuarios estaban involucrados en su Hipp, cuya labor ya era reconocida comandos para crear, modificar o utilización y mejora, entre ellos un en el mundo del Software Libre y borrar la información contenida en número importante de empresas. de Código Abierto por ser uno de la base, delegando al código original Una de las más grandes, AOL, puso los desarrolladores del lenguaje Tcl. del Proyecto GNU la tarea de realizar una suma importante de dinero para Cuando fue empleado por la empresa físicamente las lecturas y escrituras acelerar el desarrollo de SQLite, tras General Dynamics para mantener necesarias en el sistema de archivos. lo cual fue liberada la siguiente versión el software encargado de controlar La segunda versión de SQLite (la (3.0), que incorporó un sinfín de barcos de guerra de la U.S. Navy (la 2.0) sustituyó definitivamente el mejoras. La última versión estable, la marina de guerra norteamericana), código de gdbm, implementando 3.7.10, publicada los primeros días del se le solicitó modificar los programas una base propia, basada en B-trees. corriente año, se basa en dicha versión. críticos para poder prescindir del pesado motor de base de datos relacional con el que trabajaban (Informix). Richard estaba muy familiarizado con el Proyecto GNU, el emprendimiento de Richard Stallman para crear un Sistema Operativo totalmente libre, gracias a su trabajo en el lenguaje Tcl. Sabía que uno de los paquetes que componen el proyecto, llamado gdbm (una versión no propietaria de la librería dbm para UNIX, que permite implementar un sencillo sistema de base de datos) cumplía con los requerimientos que le habían sido especificados. Tomando el código de gdbm, Hipp puso manos a la obra, y luego de algunas semanas de trabajo nació la versión 1.0 de SQLite. Esta primera versión era SQLite es una base de datos ideal para emplear en teléfonos móviles, a punto tal que tanto el Sistema Operativo del iPhone (iOS) y el de los teléfonos basados en Android incorporan esta librería. 9
  • 10. 10 LICENCIA DE SQLITE Un factor determinante a la hora de elegir un sistema de base de datos es su licencia. La licencia GPL de MySQL, por ejemplo, impide incorporarla a una aplicación propietaria, salvo que se opte por recurrir a una versión privativa del motor, que sí permite este tipo de usos, pero no es gratuita. La licencia de SQLite es otro punto a favor en este sentido a la hora de desarrollar para dispositivos con escasos recursos. Tanto las versiones binarias de la librería como el código fuente se encuentran liberadas en el “dominio público”, lo que permite su uso, copia, modificación, distribución e incluso su venta bajo cualquier circunstancia, incluyendo su incorporación a un software propietario. El shell de SQLite permite acceder a las bases de datos sin necesidad de escribir programas en alguno de los lenguajes soportados.
  • 11. DESCARGA E SOPORTE Y INSTALACIÓN DOCUMENTACIÓN Algunos lenguajes, como PHP o En el sitio web de SQLite se encuentra módico”. También figuran en el sitio Python, ya incluyen SQLite en publicada abundante documentación algunas listas de correo a las que sus paquetes de instalación. Para sobre sus características y utilización, suscribirse para enterarse de las desarrollar en otros lenguajes con así como una completa referencia de últimas novedades, intercambiar SQLite tenemos diversas alternativas. la librería, sus APIs desde distintos información y solicitar ayuda. Bajo GNU/Linux, puede obtenerse lenguajes (como C++ y Tcl), tutoriales mediante el administrador de y ejemplos, y también enlaces hacia Por último, aunque SQLite es libre paquetes correspondiente a cada libros (online y en papel) publicados y gratuito, pueden conseguirse distribución. Pueden descargarse por distintos autores sobre el allí enlaces hacia extensiones del sitio oficial de SQLite los fuentes desarrollo de aplicaciones en conjunto propietarias (algunas de ellas pagas) de la librería y compilarlos con el con esta base de datos relacional. que agregan funcionalidad no compilador de C de su preferencia, ofrecida por la versión estándar de la bajar directamente los binarios Además, su autor original, Richard librería. La más interesante de ellas precompilados para diversas Hipp, y su empresa (Hwaci) ofrecen es SEE (SQLite Encryption Extension) plataformas. soporte e inclusive la posibilidad de que permite trabajar con una base de realizar modificaciones específicas datos cifrada con potentes algoritmos En el sitio se ofrecen binarios para a pedido, según ellos “por un precio AES de 128 y 256 bits. Linux, Mac OS X, Windows y .NET. También se ofrecen junto con los binarios de las librerías un shell de comandos ejecutable, que permite ingresar directamente en la consola las órdenes SQL para manipular las bases de datos SQLite. Por último, debe obtenerse la librería de “binding” que corresponda a cada lenguaje. Para este último paso, se aconseja recurrir a la ayuda online de dicho lenguaje. Como casi todos los motores relacionales que se precien de tal, SQLite también cuenta con sofisticadas herramientas visuales desarrolladas por terceros que permiten administrar y mantener la base de datos. 11
  • 12. 12 UN EJEMPLO EN PYTHON A continuación, un ejemplo de código Python que trabaja con el “binding” de SQLite. En este ejemplo, que se extiende por apenas unas pocas líneas de código (siguiendo la tradición “pythónica”) se comienza por crear una base permanente en el sistema de archivos raíz (puede crearse una base temporal en memoria, que desaparecerá cuando finalice la ejecución de la aplicación), prosigue creando una tabla y ejecutando SQL INSERTs para generar dos registros, y finaliza leyendo el contenido de la tabla y volcándolo a pantalla. Gráfico comparativo de la performance de MySQL contra la de SQLite. Aunque MySQL gana por poco, su consumo de recursos muy superior inclina la balanza en favor de la librería que nos ocupa en esta edición.
  • 13. Richard Hipp, creador y principal mantenedor de SQLite. CONCLUSIONES from sqlite3 import dbapi2 as sqlite Unos pocos conocimientos del trabajo connection = sqlite.connect(‹/tmp/ con cualquier motor relacional, y prueba.db›) un equipo informático con algo de cursor = connection.cursor() RAM libre alcanzan para trabajar con query = «CREATE TABLE empleado SQLite. (legajo INTEGER PRIMARY KEY, cargo VARCHAR(10),» El lenguaje SQL es una forma sencilla query += «apellido_y_nombre y eficaz de almacenar, modificar VARCHAR(100), supervisor y recuperar información de cierta INTEGER)» complejidad. No por nada entre los cursor.execute(query) usuarios de esta excelente librería query = «INSERT INTO empleado se cuentan gigantes de la industria VALUES « informática, como Mozilla, Google, query += «(1, ‹GTEGRAL›, ‹Carlos Apple, Nokia y Adobe. Por supuesto, Gomez›, 1)» el hecho de que esta base sea cursor.execute(query) ideal para trabajar en dispositivos query = «INSERT INTO empleado embebidos y móviles no lo limita a VALUES « estas plataformas; emplearla en una query += «(2, ‹SUPERVISOR›, ‹Jorge aplicación hecha y derecha para las Gonzalez›, 1)» PC tradicionales es una buena idea, cursor.execute(query) si tenemos estructuras complejas connection.commit() de datos con las que queremos cursor.execute(«SELECT * FROM interactuar, y preferimos obviar la empleado») dependencia de un motor tradicional, resultset = cursor.fetchall() como MySQL. for row in resultset: print row[0], row[1], row[2], En definitiva, contar a SQLite entre row[3] nuestro arsenal de conocimientos connection.close() dentro del mundo de las bases de datos amplía nuestros horizontes en gran manera, y por lo tanto es imprescindible tener aunque sea nociones básicas de su empleo. 13
  • 14. 14 PROYECTO #CODE: PANEL DE CONTROL FEROZO ENTREVISTA Ing. Daniel Lázaro,. Coordinador Área Desarrollo de Dattatec. Bienvenidos a esta nueva sección de Pixels&Code que En esta primera entrega de Proyecto #Code, hemos decidido llamar “Proyecto #Code”. La idea de decidimos empezar por casa y reunirnos con Daniel esta sección es que sea una puerta para compartir con Lázaro, quien es la persona encargada de una de ustedes los diferentes programas que revolucionan el las piedras basales de Dattatec: el panel de control mundo del software. Para ello nos comprometemos a Ferozo, un software que tiene como objetivo construir involucrarnos de lleno en los diferentes proyectos que proyectos Web de fácil administración, con el cual aquí destaquemos, yendo directamente a las fuentes podamos tener presencia en internet de manera y entrevistando a las personas que están directamente inmediata, para volcar nuestras ideas y tener una relacionadas con el proyecto del mes. amplia llegada hacia nuestros clientes.
  • 16. 16 Pixels&Code: Daniel, contale a nuestros lectores de qué se trata Ferozo. Daniel Lázaro: Ferozo es un panel de control para hosting, pionero a nivel nacional, 100% desarrollo propio, con versiones en las dos plataformas más importantes de hosting (Linux y Windows), y dividido convenientemente en módulos que abarcan todos los estratos de usuarios y necesidades (panel para usuarios de hosting, panel para revendedores de hosting y administradores de servidores, panel para usuarios de webmail y constructor on-line de sitios web). Ferozo es un proyecto enteramente desarrollado en Rosario, que tiene alcance mundial a través del uso que y servicios para que otras compañías almacenen los clientes de Dattatec le dan como panel de control cualquier información que quieran que sea accesible para (auto) gestionar los recursos del servicio de por una red, desde sus páginas web, hasta la hosting que la empresa brinda. información de su red interna o Intranet y sus casillas de correo. P&C: ¿Qué diferencias radicales distancian a Ferozo de otros sistemas de gestión de contenidos como Siguiendo con este ejemplo, los paneles de control de Wordpress? hosting vendrían a ser, en la web, algo así como los conserjes y el servicio de cuarto de nuestro hotel del DL: Bueno, para empezar, las diferencias son muchas ejemplo. En definitiva, una suerte de administradores, ya que Ferozo no es un Sistema de Gestión de coordinadores y árbitros del servicio. Contenidos (CMS) como WordPress, sino un Panel de Control para Hosting. P&C: ¿Cuáles son las ventajas de operar con un panel de control? Para explicarlo de una forma sencilla voy a hacer abuso de un ejemplo comparativo que me agrada. DL: ¡Muchísimas! Hoy en día casi no se concibe Las empresas que se dedican al servicio de hosting administrar un servidor de hosting en forma manual. son como los hoteleros de la red: ofrecen espacio Además, eso sólo es posible en casos muy específicos.
  • 17. Por lo general, los administradores de servidores de hosting prefieren dejar convenientemente en manos de los usuarios tareas como crear cuentas de correo, agregar dominios a un sitio, instalar una aplicación como Wordpress, etc. Creo que es muy clara la ventaja, por parte del usuario, de no tener que depender de un administrador de servidor para realizar tareas rutinarias como las mencionadas anteriormente. Y mucho más: por ejemplo, los revendedores de hosting pueden crear nuevas cuentas para sus clientes sin interactuar con ningún “Sysadmin”; y los usuarios de webmail pueden configurar su filtro antispam sin necesidad de depender del webmaster. P&C: ¿Cuánto tiempo tardaron en desarrollarlo y cuál fue el capital humano involucrado en el proyecto? 17
  • 18. 18 DL: Las primeras versiones de cada plataforma buscado desde edad temprana de Ferozo para tardaron alrededor de un año cada una para alcanzar el éxito en materia del servicio de hosting. desarrollarse e involucraron un equipo de un total Por otro lado, a nivel estratégico empresarial, Ferozo de 4 personas entre las dos. significó la integración vertical y la independencia de la empresa Dattatec de proveedores externos, El proyecto Ferozo continúa hoy en día más vigente obteniendo de estos factores grandes ventajas que nunca, con un equipo de más de 15 personas, competitivas. entre arquitectos de software, desarrolladores, sysadmines y diseñadores web. P&C: ¿Qué devolución han obtenido de los usuarios finales? P&C: Teniendo en cuenta que con esta herramienta podemos generar y tomar el control rápidamente de DL: Los usuarios siempre se muestran complacidos sitio web, ¿cuál fue el aporte de Ferozo en el meteórico por los avances y mejoras que Ferozo les va ascenso que ha tenido Dattatec en los últimos años? brindando. Recibimos de ellos una buena cantidad de feedback, casi siempre a modo de sugerencias DL: Puedo afirmar que el poder generar fácilmente y oportunidades de mejora. La realimentación que un sitio desde una herramienta anexa al panel de recibimos de parte de nuestros usuarios es siempre control, fue un factor clave y estratégicamente uno de los más valiosos motores que generan los cambios y los agregados de funcionalidades y tecnologías. La verdad, siempre hemos sentido esa sinergia con nuestros usuarios. Esa sensación de ir avanzando juntos en el camino. Siempre mejorando y haciéndonos mejorar mutuamente. Estamos muy agradecidos de haber logrado esa relación. P&C: ¿Cuáles son las nuevas características en el desarrollo que incluyeron últimamente y cómo crecerá Ferozo en este año? DL: Últimamente estuvimos trabajando más que nada en las interfaces y la usabilidad. Le agregamos un modo simple a la interfaz de Ferozo en el panel
  • 19. para usuarios de hosting, con las opciones mínimas y más usadas en la etapa de “set up” de un sitio, de forma que cada cuenta de hosting que es creada utiliza por defecto este modo simple que, por un lado, facilita al recién iniciado en materias de hosting la configuración inicial de su sitio, y por otro, le deja un cómodo acceso a las funcionalidades más requeridas a los más experimentados. También hemos estrenado nuevas interfaces para el clásico “modo avanzado” de Ferozo para usuarios de hosting. Hemos re-hecho las interfaces resultando las nuevas con características totalmente Web 2.0: Ajax, recargas parciales, mejor usabilidad y funcionalidades ampliadas en general. Con respecto a este año, podemos adelantar que pronto se viene el soporte de acceso seguro (SSL/HTTPS) 19
  • 20. 20 DL: Ferozo está incluido en los planes del servicio de hosting de Dattatec y se lo puede utilizar al contratar cualquier plan. Pueden visitar los siguientes enlaces para probar Ferozo y para obtener ayuda y más información asociada al panel: http://ferozo.net Panel de Control del Constructor de Sitios Ferozosite URL: http://ferozositedemo.dattatec.com:2085/ Usuario: fsdemo / Contraseña: fsdemo Panel de Control para usuarios de Hosting, plataforma Windows: URL: http://windows.dattatec.com:2082/ Usuario: demo / Contraseña: demo para el panel y la integración con nuestra solución de comercio electrónico. Panel de Control para usuarios de Hosting, plataforma Linux: P&C: Contanos cómo fue la experiencia personal al presentar a Ferozo en los premios Sadosky. DL: Sinceramente, fue algo natural. Después de trabajar tantos años en un proyecto de alcance internacional que les es útil a más de 80.000 usuarios, nada más sentimos que era hora de presentarlo como candidato a tan distinguido premio. Por supuesto, siempre nos sentimos orgullosos de lo que hacemos y nuestro mejor premio es el reconocimiento de nuestros usuarios. P&C: Por último, ¿cuáles son los costos finales de Ferozo para los usuarios y cómo pueden acceder a una demo para evaluar su potencial?
  • 21. URL: http://demopanel.dattatec.com:2082/ Usuario: demo / Contraseña: demo ¿POR QUÉ FEROZO? Mientras charlamos con Daniel, durante la entrevista no podía dejar de preguntarme el origen del nombre Ferozo. La respuesta vino de la mano de Diego Vitali (Marketing Manager de Dattatec), quien amablemente arrojó algo de luz sobre el tema. “Durante los tiempos en que Guillermo Tornatore (CEO y fundador de Dattatec) toma la decisión de comenzar a desarrollar nuestro propio panel de hosting, él viaja con su familia unos días a Córdoba para descansar, y por supuesto, definir un nombre para el panel era una de las cosas que «viajaban en su cabeza». Por aquel entonces, su hija mayor tenía 3 años. En un momento del viaje, Guillermo manejaba por una zona de bosques frondosos al costado del camino y ante este paisaje, le comenta a su hija que en esos bosques vivía el Lobo Feroz del cuento de Caperucita Roja, con el objetivo de entretenerla y llamar su atención, a lo cual su hija le pregunta ¿Ahí vive el lobo Ferozo?... Esto quedó en la mente de Guillermo y al regresar a Rosario el tema del nombre del panel estaba resuelto. Quien en otro momento había sido motivo de la decisión de Guillermo de desarrollar Dattatec desde Argentina, puso también el nombre al panel de control”. 21
  • 22. 22 DESARROLLO DE SOFTWARE ÁGIL CON SCRUM Cuando hablamos de desarrollo de software muchas Pero en la gestión es especialmente compleja debido veces sólo nos quedamos en la superficie de lo que a que existen diferentes vertientes paradigmáticas que en realidad es el vasto, y muy profundo, mar de la intentan sobresalir de otras. Debido a esto es que se ingeniería de software. Es común que hablemos de han llegado a entablar peleas internas en empresas, creación de líneas de código, técnicas y herramientas separando a las personas en bandos. Aquellos que para mejorar nuestro rendimiento, velocidad o apoyan un modelo, otros que no están tan seguros y facilidad en la escritura de código, menos errores o prefieren pivotear entre varios, y otros que prefieren una mejor calidad visual de nuestras aplicaciones, los métodos ya conocidos y con más tiempo de pero el desarrollo de software no se reduce sólo implementación en el mundo del desarrollo. a esta tarea. Por detrás (o acompañando) a esta también se encuentra la gestión de los proyectos. De cualquier manera podríamos colocar a la gestión de software en dos grandes áreas, aunque cada una LA GESTIÓN de estas tendrá sus matices, una que llamaremos formal, y la otra ágil. Pudiendo ir de un lado a Como decíamos, el desarrollo de software no se reduce otro de estos extremos e incluso quedándonos a la escritura de líneas de código, la gestión de los parados en la ausencia de gestión por completo. Por proyectos es tan importante como el producto, o en supuesto, la ausencia de gestión sería un desastre todo caso, la gestión, como la búsqueda y correcciones seguro para nuestro proyecto. de errores, el diseño arquitectónico y muchos otros elementos hacen al todo del producto final de software. Estos modelos de gestión tienen su historia, lo que Si nos faltara alguna de estas patas simplemente le da inicio a los mismos y por lo tanto cada uno estaríamos jugando a hacer software y no haciendo de ellos posee una filosofía que lo lleva a gestionar software realmente. los proyectos de la forma en cómo lo hacen. Por
  • 23. Matias Iacono matias.iacono@pixelscode.com ejemplo, los modelos de desarrollo de software más estrictos en sentido de documentación, seguimiento y control heredan su filosofía de procesos de gestión que provienen de otras industrias, poniendo, posiblemente, más el acento sobre la cosa que se produce y tratando de controlar las variables involucradas en dicho proceso más que en el valor del equipo que lo produce; es por este motivo que muchas veces hablamos de industria, ya que solemos imaginarnos las empresas que desarrollan software como aquellas que creaban automóviles en serie. De cualquier manera, y tratando de matizar esto, no debemos caer en extremismos, ya que este pensamiento extremo dependerá de la empresa que implemente este modelo y por otro lado, el tipo de proyecto que estemos creando. Esto quiere decir que muchos proyectos de carácter crítico, como software de alto rendimiento, para control de tráfico aéreo, manejo de redes y telecomunicaciones, entre otros, donde se necesita realizar la mayor cantidad de controles y verificaciones sobre el producto antes de que este llegue a ser utilizado. 23
  • 24. 24 En el área de la agilidad, por el contrario, el objetivo orientadas al valor entregado con el producto. se centra principalmente en la reducción de costos Normalmente, la primera rama se distingue por la innecesarios de la producción, en la entrega de creación de documentación, fichas de seguimiento, productos con valor al cliente y en el valor que el procesos escalonados y otras actividades que, sin equipo de producción puede otorgarle al producto ser ni malas ni buenas, son parte de todo proceso que está construyendo. Por lo tanto este tipo de que se oriente al control. Esto quiere decir que para formas de gestión suele eliminar el papeleo excesivo poder saber qué pasa en cada momento dentro de al mismo tiempo que pretende interactuar más un proyecto, conocer los estados de las diferentes de cerca con el cliente, mostrándole avances del materias, cómo pasan de uno a otro y demás, es producto, o requiriéndole retroalimentación del necesario llevar controles exhaustivos, lo que deriva producto de forma seguida. en el uso de herramientas y documentos constantes. Por supuesto, y al igual que el otro polo de gestión, Por otro lado, cuando el desarrollador se topa con aquí tendremos un abanico de posibilidades de la agilidad, uno de los primeros atractivos será la gestión donde cada uno aplicará sus conceptos y sugerencia de no requerir la documentación que prácticas, por lo que no debemos confundirnos y se proponía en los modelos anteriores. Esto es mal considerar que todos los modelos ágiles, así como interpretado fácilmente y deriva en la ausencia los modelos orientados al control, aplican las absoluta de documentación, entre las que se incluirán mismas prácticas, aunque posiblemente sí, estén la planificación de tareas y tiempos, documentos amparados por el mismo paraguas filosófico. arquitectónicos, manuales de usuarios y muchos otros documentos inherentes al desarrollo de software. Pero esto es un error, un concepto de agilidad mal entendido ESTO NO ES y que es esgrimido por desarrolladores y gestores para AGILIDAD no tener que realizar las prácticas de ingeniería que todo proyecto demanda. En este punto, la agilidad, y Es importante que destaquemos qué es y qué no es dependiendo del modelo que elijamos, nos sugerirá agilidad, o por lo menos, algunos de los vicios que reducir la carga documental, en la medida que esto sea se suelen encontrar cuando se habla de agilidad, los posible, pero no la abolición total de cualquier pieza cuales han llevado a la mala interpretación y malas de seguimiento en la construcción del producto. prácticas en proyectos de desarrollo de software. Por lo tanto, cuando hablamos de agilidad, también Como veíamos al principio, dividimos la gestión en hablamos de estimaciones de tiempos, documentos dos grandes ramas: las orientadas al control y las y diagramas.
  • 25. EL PROBLEMA DE SCRUM COMO MODELO ÁGIL Los modelos ágiles son muchos, variados en su Scrum fomenta valores de aplicación y con diferentes grados de dificultad en profesionalismo, donde todos los su entendimiento, de esta forma podemos encontrar integrantes del equipo deben trabajar nombres como Lean, Kanban, XP y otros, aunque en conjunto para conseguir un objetivo. Scrum posiblemente sea el que haya tenido mayor popularización y por lo tanto se haya inmiscuido en las empresas mucho más fácilmente. Lamentablemente, esta popularización no hizo, en etiquetas, declarándose agilistas y dirigiéndose al muchos casos, más que dañar la credibilidad sobre fracaso garantizado y, con éste, generando mala esta herramienta y al mismo tiempo toda la idea que fama al modelo. rodea a la agilidad y lo que tiene para ofrecernos en la gestión de nuestros proyectos. Este daño vino De cualquier manera, aquellas empresas que pudieron de la mano de malas aplicaciones del modelo o una entender la propuesta fueron las que equilibraron falta de entendimiento del mismo y su aplicación. la balanza a favor de Scrum y la agilidad. No sólo Posiblemente una de las grandes fallas de Scrum sea aplicando los pasos propuestos sino generando un el hecho de parecer muy simple de aplicar debido a cambio interno en la estructura de la empresa, no su simpleza conceptual; concepto que resulta simple esperando que la jerarquía de la misma tome las e incluso elegante pero que encierra grandes decisiones sino dejando a aquellos que estaban más complicaciones debido a la cantidad de ideas inmiscuidos en los proyectos, que decidieran cuáles y conceptos que se deben manejar, así como eran los pasos a seguir; dejando que los grupos de paradigmas y prejuicios culturales, de gestión y desarrollo se consolidaran, limaran sus asperezas y que personales. cada miembro no fuera considerado un mero recurso, como una máquina más plausible de ser intercambiada Un claro ejemplo ha sido, en muchas empresas, la en cualquier momento a otro equipo creyendo que la adopción de los nombres propuestos por Scrum matemática de la gestión solucionaría el problema para las diferentes ceremonias que éste presenta, humano; educando al cliente para que entienda que el pero la ejecución de la gestión del modo tradicional, proyecto de software no es una mera pieza comprada jerarquizado, con gestiones realizadas desde las en un supermercado y que para que el mismo tenga cúpulas, impidiendo que los equipos se estabilicen, éxito él también deberá participar con sus ideas, con entre otros factores de fracaso comunes. Por lo su visto bueno, con sugerencias y que su trabajo no se tanto, estas empresas terminarían cambiando reduce a firmar cheques. 25
  • 26. 26 LOS PASOS ROLES EN DE SCRUM SCRUM Posiblemente lo más atractivo de Scrum es, como Normalmente, en el desarrollo de software los decíamos anteriormente (y esto se suele aplicar en equipos de desarrollo suelen estar conformados todos los modelos ágiles), que no se dictaminan por personas con diferentes especialidades, y cada reglas metodológicas estrictas para seguir, sino especialidad actúa sobre el proyecto en determinado que se pretende o se otorgan ciertas referencias momento. Por ejemplo, los arquitectos podrán para que al aplicar el modelo, se opte por la mejor plantear el diseño del producto en el inicio del solución. Posiblemente este es el punto más difícil mismo, los desarrolladores crearán el código luego, de concebir, ya que al no contar con un manual lleno y los encargados de realizar las pruebas sobre el de lineamientos rápidamente se cae en las malas producto y detectar errores al final. Esta delimitación prácticas, olvidando incluso los pasos mínimos y por áreas, especialidades y procesos se puede necesarios para llevar adelante el modelo. ver más claramente en modelos de procesos de desarrollo llamados en cascada. Una diferencia fundamental en Scrum es que no se realiza una distinción a nivel granular, limitándose a sólo tres roles: el Product Owner (o dueño del producto), el Scrum Master y el equipo propiamente dicho.
  • 27. Proceso de desarrollo de software en cascada. Este proceso es comúnmente utilizado en metodologías orientadas al control. EL PRODUCT EL SCRUM OWNER MASTER El dueño del producto o Product Owner es el El Scrum Master es una pieza fundamental dentro representante del producto y el conocimiento de de Scrum. Su principal labor es la de convertirse en qué es lo que dicho producto pretende hacer, por lo un facilitador para el equipo, intentando remover tanto, este rol está encargado de velar por el valor obstáculos del camino que impidan el normal que ese producto generará, sabiendo qué partes del avance del desarrollo del producto. mismo pueden o no producir mayores beneficios si éste viera la luz. Comúnmente suelen surgir en el proceso de desarrollo problemas de comunicación entre Normalmente, se asocia a esta figura con el cliente en el equipo y el Product Owner, o la estructura sí mismo, pero es posible contar con la ayuda de otra empresarial y el equipo, por lo que el Scrum Master persona que actúe en nombre de él y se responsabilice podrá interceder para que el proceso productivo de las decisiones tomadas a nivel de producto. siga un flujo normal. El Product Owner podrá, por ejemplo, elegir Por el contrario, el Scrum Master no es un líder funcionalidades a quitar, o nuevas a añadir dentro de proyectos o gestor del mismo, rol que suele ser de la lista de funcionalidades para ese producto. confundido fácilmente cuando este modelo es mal Este tipo de decisiones pueden ser tomadas en base aplicado, por lo tanto, el Scrum Master no tiene a un mercado variable, donde lo pensado para un permitido decidir sobre cómo realizar el producto, producto ya no sea válido con el correr del tiempo qué miembro del equipo hará determinada funcionalidad, realización de estimaciones, entre otras funciones. 27
  • 28. 28 LOS PASOS DE EL EQUIPO SCRUM Por último y uno de los más importantes es el Por último, en Scrum contamos con algunos equipo de desarrollo. Decimos que es uno de los mecanismos que nos garantizarán la obtención de más importantes debido a que es éste el que se cierto ritmo en el proceso productivo. Este ritmo no encargará de producir el producto, y sólo éste sabe se reduce sólo a la creación de código sino también cuál será la mejor forma de hacerlo así como cuánto a las estimaciones de tiempo, las interacciones con tiempo tomará. Esto quiere decir, por un lado, el equipo y con el cliente. que un equipo Scrum deberá estar formado por todas las personas que sean necesarias para poder Todo proyecto de Scrum nace con una lista de tareas crear este producto, las cuales deberán trabajar a desarrollar que representan el producto en su conjuntamente, tomando decisiones, eligiendo totalidad. Esta lista es comúnmente llamada Product arquitecturas, probando herramientas, analizando el Backlog. Además de tener la lista de tareas, esta código y un largo etcétera. debe estar priorizada en base a las necesidades del cliente, por lo que esta tarea de priorización suele Aquí es donde encontramos una diferencia ser realizada por el Product Owner. fundamental y funcional sobre otras formas de gestión, ya que tanto arquitectos, desarrolladores, Con nuestro Product Backlog completo, esto es, testers, diseñadores y demás, no esperan su turno priorizado y estimado, iniciamos una ventana para actuar y poner en práctica sus conocimientos de desarrollo que suele durar entre dos a sobre el producto, sino que trabajan de forma cuatro semanas – el tiempo que elijamos será sinérgica entre ellos. Así, mientras el desarrollador una constante, por lo que es importante elegir escribe las líneas de código para una funcionalidad, correctamente. Esta ventana de tiempo recibe el el tester escribe casos de pruebas para la misma, nombre de Sprint y es un momento donde el quipo, el arquitecto plantea mejores formas de manejar seleccionando una cantidad de ítems del Product los flujos de información y el gestor de bases de Backlog se pondrá en la tarea de crearlos. Por lo datos optimiza consultas. De esta forma todos tanto, es vital que durante este tiempo el equipo no tienen noción del proyecto como una unidad y la sea perturbado ya que su tarea es la de realizar las responsabilidad de su correcta finalización recae piezas elegidas para esta iteración. sobre todos. Durante el tiempo que dure el Sprint, el equipo tendrá una reunión diaria, sólo entre ellos y el Scrum
  • 29. El proceso de Scrum resulta simple, pero encierra en sí mismo una demanda de profesionalismo y prácticas de ingeniería que no muchos están dispuestos a llevar adelante. Master si fuese necesario, donde se abordarán, entonces, nos darán una oportunidad para poder hacer por cada integrante, tres temas. Cada uno de los un viraje de timón sobre el proyecto y de esta forma integrantes deberá contestar a las preguntas: - ¿Qué alcanzar un producto que efectivamente genere algún hice ayer? ¿Qué haré hoy? ¿Existe algún impedimento valor para el cliente. que no me permita trabajar? Con estas preguntas en la mesa, todo el equipo RESUMEN puede saber cuál es el estado de cada uno de los integrantes del mismo y así poder solucionar Lo que hemos visto aquí es sólo la punta de Scrum problemas o colaborar en determinadas situaciones. como forma ágil de gestión. Como podemos notar, Debemos recordar que la responsabilidad del queda mucho recorrido, tanto a nivel de la aplicación producto recae sobre todos sus miembros, por lo del modelo, como de la interacción entre el cliente que el mantener una comunicación fluida y clara es y el proveedor del servicio. Y es aquí donde se ven de vital importancia. las fallas en la aplicación del modelo en la vida real, ya que muchas veces los que lo llevan a la práctica El último paso se lleva a cabo cuando el Sprint finaliza, suelen quedarse con la historia corta sin ahondar en esto es, al finalizar las dos o cuatro semanas de los detalles más importantes. De cualquier manera, producción. En este momento es cuando se requiere las formas ágiles de gestión ya han podido torcer mayor soporte del Product Owner, ya que el objetivo la media de desconfianza y se han probado como será mostrarle lo que se ha producido en base a los modelos válidos y útiles, por lo que se ha dejado de ítems por los cuales el equipo se comprometió al inicio lado la experimentación para formar parte de una del Sprint. En este punto, el Product Owner podrá realidad en las empresas de desarrollo de software. validar o no cada uno de los elementos presentados, pero más importante será que en este momento se En siguientes artículos profundizaremos más en esta podrá saber si lo producido coincide con las ideas práctica, detallando cada uno de los artefactos, así originales o con las demandas del mercado. Si tenemos como las responsabilidades y prácticas que deberá en cuenta que el mercado fluctúa y las necesidades cumplir cada miembro del proyecto. Finalmente, del mismo cambian, puede ser que en este punto el aprenderemos sobre las herramientas de gestión que producto deba tomar otro rumbo. Estas iteraciones nos recomienda Scrum y cómo podemos saber del cortas y contactos con el cliente de forma seguida, estado y evolución del proyecto. 29
  • 30. 30 TESTING DE APLICACIONES No importa la cantidad de tiempo COMENZANDO que se invierte en el diseño de una aplicación Android, o incluso Al momento de crear un proyecto qué tan cuidadosos somos en la Android podemos crear el Proyecto programación, los errores son Android que realice el Testing. Pero inevitables y los errores aparecerán. en este caso, vamos a trabajar En esta nota, queremos ayudar a sobre un Proyecto Android ya todos los lectores de Pixels&Code creado anteriormente, y le vamos a conseguir rápidamente tener a crear su Proyecto de Testing algunos test de unidad, y luego asociado. Usaremos el «Hola Mundo presentaremos un framework Android», aquel que realizamos la para testear de forma automática primera vez que instalamos el Kit de la interfaz de usuario, llamado Desarrollo de Android. Para quienes Robotium. quieran tener ya un proyecto «Hola Mundo Android» andando de forma súper rápida (sin usar el wizard de Eclipse), en este link pueden descargar un «Hello Pixel&Code «: http://pixelscode.com/downloads/ HelloPixelAndCode.zip
  • 31. Mariano Salvetti mariano.salvetti@pixelscode.com CREANDO EL PROYECTO DE TESTING El testing de una aplicación Android es también una aplicación Android. El wizard de Eclipse para un «Nuevo Proyecto Android de Test» nos crea un proyecto de testing y el framework necesario, al mismo tiempo. Veamos cómo hacer esto: 1- En Eclipse, vamos a: New > Project > Android > Android Test Project c- Select Build Target: Seleccionamos 2- En la ventana del Wizard, le la plataforma mínima de la aplicación, ingresamos los siguientes valores: en este caso Android 1.6 o superior; a- Project clic en Finish. Name: “HelloPixelAndCodeTest”, clic en Next. 3- Vemos cómo el wizard nos toma b- Select TestTarget: seleccionamos automáticamente el Application name “An existing Android project”, y luego (HelloPixelAndCodeTest) y el package seleccionamos “HelloPixelAndCode” name, todo reflejado en el nuevo de la lista de proyectos en nuestro proyecto que aparece en nuestro Workspace; clic en Next. Package Explorer. 31
  • 32. 32 CREANDO LA CLASE CON EL CASO DE TEST Ahora ya tenemos todos los archivos nombre de la Actividad a testear. y directorios que necesitamos para c- Sin cambiar ningún otro valor, crear y ejecutar una aplicación de damos clic en Finish. testing, a excepción de la clase 3- Ahora, ya tenemos el archivo que contiene los tests (la clase de MiPrimerTest.java en el proyecto, casos de prueba). Vamos a crear que es una clase que extiende a dicha clase Java que contenga el la clase para Testear Actividades, código que testea la Actividad y que llamada ActivityInstrumentationTestC extienda una de las clases de Test ase2<T> que trae Android, especialmente diseñada para Actividades. Nuestra 4- Abrimos el archivo MiPrimerTest. clase va a contener la definición de java y veremos este código: cuatro métodos, de los cuales luego explicaremos su función. package com.msalvetti.pixelandcode. Con esto en mente, creamos la clase: helloworld.test; 1- En Eclipse, realizamos «clic import android.test. derecho» sobre el paquete ActivityInstrumentationTestCase2; «com.msalvetti.pixelandcode. helloworld.test» del proyecto public class MiPrimerTest extends «HelloPixelAndCodeTest» : New > ActivityInstrumentationTestCase2<H Class elloPixelAndCodeActivity> { } 2- En la ventana del Wizard, le ActivityInstrumentationTestCase2 ingresamos los siguientes valores: nos permite realizar testing funcional a- Name: “MiPrimerTest”. para una sola Activity. También se b- Superclass:”android.test. puede obtener la Activity inyectada que ActivityInstrumentationTestCase2 se está probando, llamando al método <HelloPixelAndCodeActivity> la getActivity(). Y como la actividad se superclase está parametrizada por el pone en marcha antes de cada test,
  • 33. nos permite ver cómo la interfaz de antes de llamar a cada método de referencia al objeto no es nula, es usuario está siendo probada. test, es por eso que inicializamos decir, si se inicializa correctamente. 5- Agregamos el constructor y el las variables y preparamos el método setUp() a la clase, y luego entorno de prueba. Para este caso, 9- Ahora, el método que valida el tres variables de clase necesarias, inicializamos la aplicación Android texto: que se muestran a continuación: a testear, recuperamos el texto que public void testText() { public MiPrimerTest() { se muestra en pantalla y el texto que assertEquals(resourceString,(String) super(“com.msalvetti.pixelandcode. está en los archivos de recursos. mView.getText()); helloworld”,HelloPixelAndCodeActivi } ty.class); 7 - En estos momentos, es necesario Este método testText() llamará a } que importemos lo que nos pide un método Assert de JUnit para protected void setUp() throws Eclipse (el TextView y la Actividad comprobar si el TextView se muestra Exception { HelloPixelAndCodeActivity). con el texto esperado. super.setUp(); Para este ejemplo, la prueba actividadTestear = this.getActivity(); 8- Ahora, agregamos un método que espera que el TextView esté mView = (TextView) actividadTestear. testea las precondiciones: mostrando el recurso (la String) findViewById(com.msalvetti. public void testPrecondiciones() { // que se declaró originalmente en la pixelandcode.helloworld.R.id. se ejecuta una sola vez este metodo. aplicación a testear. La llamada a textTitulo); assertNotNull(mView); assertEquals(String, String) compara resourceString = actividadTestear. } el valor esperado, el recurso getString(com.msalvetti. Aunque una prueba de precondiciones String, con el texto mostrado por pixelandcode.helloworld.R.string. puede comprobar diferentes el TextView, obtenido a partir del hello); condiciones, en esta aplicación TextView. El test tiene éxito sólo si } sólo necesitamos comprobar si la los textos coinciden. private HelloPixelAndCodeActivity aplicación sometida a prueba se actividadTestear; inicializa adecuadamente y si existe 10- En este link pueden descargar el private TextView mView; el TextView. Para esto, se llama al código fuente de este proyecto para private String resourceString; método heredado assertNotNull(), testear: http://pixelscode.com/ pasando una referencia al TextView. downloads/HelloPixelAndCodeTest_ 6 - El método setUp() se ejecuta La prueba tiene éxito sólo si la simple.zip 33
  • 34. 34 EJECUTANDO ROBOTIUM, EL CASO TEST DE TEST AUTOMÁTICO DE INTERFAZ En el Package Explorer hacemos Robotium es un framework creado clic en el proyecto de testing para implementar test automáticos HelloPixelAndCodeTest y de aplicaciones Android. Con esta seleccionamos Run As> Android herramienta se puede testear JUnit Test, para que a continuación cualquier tipo de aplicación Eclipse inicie la aplicación de visual como Activity o Dialogs. testing y la aplicación sometida Comparándolo con el mundo del a prueba. Luego, el framework de desarrollo web, se podría decir que pruebas ejecuta los tests y reporta Robotium es el Selenium de Android. los resultados a la vista JUnit de La dinámica de trabajo con este Eclipse, que muestra los resultados framework es la programación de de las pruebas en un panel superior, acciones que simulen al usuario. Por con un resumen de los tests que se ejemplo, se puede realizar la acción ejecutaron, y en un panel inferior de realizar clic en un texto específico, presenta los rastros de los tests que ingresar valores en una caja de texto fallaron. En este caso, los tests se concreta o buscar un texto en una han ejecutado correctamente, por lo pantalla. Realizando varias de estas que no hay ninguna falla reportada acciones se puede comprobar si existe en la vista inferior. Ya estamos un texto, mediante un Assert por familiarizados con el proyecto ejemplo, y de esta forma validar si la de testing, continuemos con la aplicación funciona bien y pasa las automatización de pruebas. pruebas.
  • 35. Nuestra aplicación a probar será ampliada; modificaremos la única Activity para que sea una simple calculadora. Ingreso dos valores, y al hacer clic en ‹Multiplicar› se mostrará el resultado de multiplicarlos entre sí. Por simplicidad se deja este ejercicio para el lector, y queda disponible el proyecto en el siguiente link: http://pixelscode.com/downloads/ HelloPixelAndCode_Calculadora.zip. >Build path->Configure Build Path • Abrimos el archivo Así que ahora, vamos a probar esta y en Properties, clic en la pestaña MiPrimerTestAutomatico.java y mini-calculadora. Libraries, para agregar el jar de veremos este código: Robotium, como se muestra en la Para usar Robotium en un proyecto de siguiente imagen: package com.msalvetti. testing, realizamos estos pasos: pixelandcode.helloworld.test; • Dentro de nuestro proyecto de test, • Descargar el archivo robotium- creamos una nueva clase con un test import android.test. solo-3-1.jar que contiene el de ejemplo: New->Class, derivamos ActivityInstrumentationTestCase2; framework desde: http://code.google. esta clase de ActivityInstrumentatio com/p/robotium/ nTestCase2 , como se muestra en la public class MiPrimerTestAutomtico captura de pantalla: extends ActivityInstrumentationTestC Será necesario que tengamos un proyecto Android con la aplicación que deseamos testear, y como en nuestro caso, ya creado un proyecto de Test Android (si no, crearlo como vimos anteriormente: File->New->Project- >Android->Android Test Project). • Necesitamos una referencia a Robotium desde nuestro proyecto. Para eso, vamos a agregar el archivo jar: clic derecho en el proyecto- 35
  • 36. 36 ase2<HelloPixelAndCodeActivity> { nuestro caso de test, vamos a probar } el contenido del formulario y su • Los métodos tearDown() y el funcionalidad, realizando los siguientes constructor los creamos de la misma cuatro pasos: forma que en el test con JUnit. 1. Manejar los controles de entrada • Tenemos que instanciar un objeto (EditFields) de Robotium en el método setUp(), 2. Introducir los valores de nuestra esto lo realizaremos a través de la propia elección clase “Solo” del Framework. Para eso agregamos la siguiente variable 3. El acceso y clic al botón Multiplicar de clase “Solo” a nivel de clase y 4. Poner valores para verificar el modificamos el método setUp() así: resultado de la multiplicación, en el private Solo solo; //la instancia para campo de resultado. trabajar con el Robotium • ¿Y cómo usamos la variable privada protected void setUp() throws “Solo”, dentro de nuestro Test Case? Exception { Fácil, acá tenemos unos ejemplos de super.setUp(); sentencias de test, con Robotium: solo = new Solo(getInstrumentation(), getActivity()); solo.sendKey(solo.MENU); } solo.clickOnText(“Nuevo”); La clase “Solo” se utiliza para hacer las pruebas de instrumentación Assert.assertTrue(solo. más fácil. Es compatible con los searchText(“Crear nuevo archivo”)); casos de prueba que se extienden sobre múltiples actividades. Todo • Ahora, en nuestro test, el primer es manejado automáticamente por método que ingresa valores en las Robotium-Solo, por eso tenemos cajas de texto, las limpia, reingresa que tener una instancia por test, e valores y luego realiza clic en el botón: inicializarla al comenzar las pruebas, public void testIngresoTexto() { en el método setUp(). solo.enterText(0, “10”); Recordemos que, con este framework, solo.enterText(1, “20”); los casos de prueba están escritos solo.clickOnButton(“Multiplicar”); desde la perspectiva del usuario. En assertTrue(solo.searchText(“200”)); }
  • 37. • Ahora, vemos un método de prueba más completo: public void testMasCompleto() { float primerNumero = 10; float segundoNumero = 20; float resultado = primerNumero * segundoNumero; EditText FirsteditText = (EditText) solo.getView(R.id.EditText01); solo.enterText(FirsteditText, String. valueOf(primerNumero)); EditText SecondeditText = (EditText) solo.getView(R.id.EditText02); CONCLUSIONES solo.enterText(SecondeditText, String.valueOf(segundoNumero)); de los EditFields , y realizará clic Android nos ofrece un framework solo.clickOnButton(«Multiplicar»); en el botón Multiplicar. Al terminar muy poderoso y fácil de usar assertTrue(solo.searchText(String. la ejecución, se mostrará la barra que está bien integrado con las valueOf(resultado))); verde que muestra la ejecución herramientas de desarrollo que nos TextView outputField = (TextView) exitosa. descargamos cuando comenzamos solo.getView(R.id.TextView01); a desarrollar. ArrayList currentTextViews = solo.ge En este link pueden descargar el tCurrentTextViews(outputField); código fuente de este proyecto Cómo realizar testing es una parte assertFalse(currentTextViews. para testear automáticamente, importante de cualquier desarrollo; isEmpty()); utilizando JUnit y Robotium: http:// en esta nota realizamos una TextView salida = (TextView) pixelscode.com/downloads/ introducción al testing con JUnit currentTextViews.get(0); HelloPixelAndCodeTest_completo.zip y les ayudamos con el puntapié assertEquals(String. inicial, de forma rápida, para luego valueOf(resultado), salida.getText(). El principal problema que nos presentar una interesante forma de toString()); podemos encontrar es con la automatización de casos de test, modificación de la interface de la mediante JUnit y Robotium. Ejecutamos con clic derecho en el aplicación, algo habitual cuando proyecto, Run As>Android JUnit se está desarrollando. Si ocurriese Con este framework podemos Test. Si las cosas salen bien, el alguna modificación en algún texto, automatizar nuestros tests y Emulador carga la aplicación, y los test afectados se deberían cambiar ejecutarlos diariamente a medida entrará automáticamente los valores modificándolos a los nuevos textos. que vamos desarrollando. 37
  • 38. 38 LAS LEYES DE PROGRAMACIÓN DE TAYLOR (PARTE II) Este mes continuamos por la senda iniciada en la edición anterior, tomando las leyes de Taylor como faro. El Sistema Operativo UNIX y sus herederos ofrecen a sus usuarios una importante cantidad de herramientas, que en mano de un programador que tenga un conocimiento mínimo de cómo trabajar con ellas se vuelven extremadamente poderosas, permitiendo hacer más en menos tiempo. En esta ocasión nos vamos a centrar en un programita muy interesante: “sed” (stream editor). Sed implementa un mini-lenguaje de programación, que permite automatizar transformaciones a un archivo de texto, de forma similar a como ya vimos con “tr”. Este último está pensado para realizar sustituciones sencillas de un caracter por otro, mediante una serie de reglas que se le establecen. En cambio, sed puede realizar acciones mucho más complejas, gracias a su soporte de expresiones regulares. Veamos cómo hacerlo.
  • 40. 40 TAYLOR, SIEMPRE USOS SIMPLES PRESENTE DE SED Pero primero, recordemos el enunciado del misterioso La mayoría de los casos en los que suele utilizarse Taylor, que como ya mencionamos en la primera sed son sencillos, y por lo tanto pueden entenderse parte, deben leerse de abajo hacia arriba, es decir, a simple vista. No obstante, este minilenguaje es lo en orden de complejidad decreciente. suficientemente complejo y poderoso como para que un script más largo y complicado sea lo suficientemente “Nunca programe en ‘C’ si puede hacerlo en ‘awk’; críptico para que sólo un usuario avanzado del mismo Nunca lo haga en ‘awk’ si ‘sed’ puede manejarlo; pueda interpretarlo rápidamente. Para colmo, la Nunca use ‘sed’ cuando ‘tr’ puede hacer el trabajo; documentación más a mano (las páginas de man) no Nunca invoque ‘tr’ cuando ‘cat’ sea suficiente; es de lo más accesible y completa. Por lo general, en Evite usar ‘cat’ siempre que sea posible.” el trabajo con sed, como dijo un gran poeta, “se hace camino al andar”. En nuestro “episodio anterior” aprendimos las distintas posibilidades que nos ofrecen cat y tr, El uso más común de sed es equivalente a la además de cubrir otras herramientas que permiten función “Buscar y Reemplazar” que ofrecen muchos automatizar el tratamiento de textos, como cut. editores de texto. La diferencia es que con ellos Siguiendo este orden, entonces, le toca el turno a hay que hacerlo en forma interactiva, mientras que sed. Escrito originalmente por Lee McMahon durante sed (como casi todo este tipo de herramientas de la década del 70, cuando se desempeñaba en los consola en UNIX) está pensado para operar en forma Bell Labs, cuna del UNIX original, ha sido portado a automatizada. Para hacer un “search & replace” de una infinidad de plataformas, aunque sigue siendo sed, entonces, escribimos: un componente central de los clones de UNIX, como GNU/Linux y *BSD. Inclusive, se dice que el sed s/cadena_a_reemplazar/nueva_cadena/ gran Larry Wall, experto en sed, se inspiró en esta archivo_original.txt > archivo_nuevo.txt herramienta y en awk -que veremos en nuestra próxima entrega- al crear Perl, un lenguaje de La “/” (barra, o en inglés “slash”), que se emplea como scripting extremadamente poderoso y muy popular delimitador, es solamente una convención, ya que en nuestros tiempos, particularmente entre los sed toma al caracter que sigue inmediatamente a la sysadmins. “s” (comando que ordena el reemplazo) como tal. Si se pretende reemplazar una cadena que contenga la
  • 41. barra (como una ruta de archivos en UNIX), es buena Entre los diversos caracteres especiales de las idea optar por otro separador, aunque muchos optan expresiones, como aquellos empleados para especificar por usar el caracter de escape “”. Otras elecciones las expresiones regulares (paréntesis, corchetes, comunes como separador son el underscore “_”, el pipe asterisco, punto, etc.) se destaca el ampersand “&”, “|”, o los dos puntos “:”. que representa la cadena encontrada en base a la expresión de búsqueda. Esto puede ser muy útil. Es La expresión del ejemplo anterior, tal como fue escrita, fácil reemplazar “hola” por “_hola_” cuando conocemos sólo reemplaza la primera ocurrencia de la cadena a exactamente la palabra que estamos buscando, pero reemplazar especificada. Si se quiere sustituir todas las ¿qué ocurre cuando desconocemos la totalidad de la ocurrencias, debe indicarse que la orden “s” es global, cadena a procesar? Veamos: agregando luego de la cadena nueva un delimitador y la letra “g”, de esta manera: echo ‹agrego underscores› | sed ‹s/[a-z]*/_&_/g› _agrego_ _underscores_ sed ‘s/cadena_a_reemplazar/nueva_cadena/g’ archivo_original.txt > archivo_nuevo.txt Si alguno de los caracteres especiales que se emplean para especificar la expresión regular de búsqueda se Aquí también encerramos la expresión entre comillas encuentra dentro de la cadena a matchear, debemos simples, algo imprescindible si es que la cadena “escaparlo” con una contrabarra “” (backslash), como a reemplazar o la nueva contienen caracteres se hace en muchos lenguajes emparentados con UNIX especiales, como el espacio en blanco. Para hacer (como los scripts de shell) para que sed comprenda una prueba sin necesidad de contar con un archivo que nos estamos refiriendo literalmente a ese caracter, de texto, podemos hacerlo con el comando “echo” y y no lo intreprete como un caracter especial: un pipe, tal como vimos la vez pasada: echo ‹agrego [underscores]› | sed ‹s/[[a- echo «Hola Juan» | sed ‘s/Hola/Buen día/’ z]*]/_&_/› agrego _[underscores]_ Da como resultado: Noten el uso de la contrabarra para escapar los Buen día Juan corchetes, provocando que de las dos palabras que componen el string a procesar solamente sea 41
  • 42. 42 SED SCRIPTS modificada aquella que está encerrada entre los Podemos escribir con el editor de nuestra preferencia caracteres “[“ y “]”. un “sed script” y luego indicarle a sed con el switch -f que lea los comandos directamente de ese archivo. Ahora, si tenemos varias palabras entre corchetes, Veamos un ejemplo. Editamos un archivo que llamamos podemos recurrir al modificador global “g” para “descastellaniza.sed”, e ingresamos lo siguiente: sustituirlas a todas. Pero si quisiéramos omitir el reemplazo de la primera ocurrencia, podemos # Este script elimina los acentos y la eñe indicarle a sed que lo haga sólo de la segunda s/á/a/g ocurrencia en adelante, de esta forma: s/é/e/g s/í/i/g echo ‘[agrego] [underscores] [parcial]’ | sed ‘s/ s/ó/o/g [[a-z]*]/_&_/2g’ s/ú/u/g [agrego] _[underscores]_ _[parcial]_ s/ñ/n/g s/Á/A/g Podemos “encadenar” más de un reemplazo de s/É/E/g dos maneras. La primera es la obvia para todos los s/Í/I/g usuarios de consola: s/Ó/O/g echo “Hola Juan. Chau.” | sed “s/Hola/Buen día”/ s/Ú/U/g | sed “s/Chau/Hasta Luego/” Buen día Juan. Hasta Luego. Cada comando sed debe escribirse en una línea separada. Si deseamos ingresar comentarios, los En lugar de usar un pipe, podemos pasarle a sed prefijamos con el caracter numeral “#”. Ahora múltiples patrones, aclarándole delante de cada uno que editamos un archivo que bautizamos “prueba.txt” se trata de un juego de órdenes a través del switch -e: con el siguiente contenido: echo “Hola Juan. Chau.” | sed -e “s/Hola/Buen “En la ortografía del idioma español, se denomina día”/ -e “s/Chau/Hasta Luego/” acento diacrítico a la tilde que se emplea para Buen día Juan. Hasta Luego. distinguir significados en pares de palabras, Por supuesto, si las órdenes a encadenar son habitualmente monosílabas, de las cuales una es muchas, esto ya es poco práctico. Hay una forma regularmente tónica, mientras que la otra átona en mejor de resolverlo. el habla, marcando el acento de la tónica.”
  • 43. Lo probamos de esta forma: drwxr-xr-x 3 root root 4096 2011-09-30 02:31 boot drwxr-xr-x 2 root root 4096 2010-12-14 21:53 cdrom sed -f descastellaniza.sed prueba.txt drwxr-xr-x 19 root root 3540 2012-03-15 17:54 dev “En la ortografia del idioma espanol, se denomina acento diacritico a la tilde que se emplea para Cabe destacar que con esta línea estamos logrando distinguir significados en pares de palabras, lo mismo que si hubiéramos escrito: habitualmente monosilabas, de las cuales una es regularmente tonica, mientras que la otra atona en ls -l / | head -n 5 el habla, marcando el acento de la tonica.” Veamos otro comando de sed, “q” (quit) que nos permite obtener idéntico resultado: TRABAJANDO CON RANGOS ls -l / | sed “5 q” Una posibilidad útil es decirle a sed sobre qué líneas Esto se interpreta como “luego de procesar la quinta tiene que aplicar las órdenes recibidas. Esto puede línea, termine la ejecución.” hacerse escribiendo directamente el número de línea a procesar, en el caso de que sea una sola, o especificando un rango desde-hasta, en la forma “N,M”. OTROS Probemos esta funcionalidad en conjunción con el COMANDOS switch -n, que le dice a sed que por defecto no envíe a standard output los patrones “matcheados”, y de Hay más instrucciones útiles. La “a” de add, agrega paso aprendemos un nuevo comando (parece mentira, una línea con el texto que se le indique tras el patrón pero hasta ahora usamos solamente el comando de especificado: búsqueda “s”, o “substitute”). La instrucción “p” de print, se usa en conjunto con el switch -n para indicar echo ‘/* Comentario de código */’ | sed ‘//*/ an’ que el rango especificado sí debe imprimirse. Aquí se agrega una línea en blanco (recordemos que ls -l / | sed -n “1,5 p” “n” equivale a NEWLINE) luego de cada línea que total 108 contenga el principio de un comentario escrito en la drwxr-xr-x 2 root root 4096 2012-03-15 18:04 bin forma “/* ... */”. Para ello, basta con especificar el 43
  • 44. 44 patrón del principio del comentario (/*), pero como echo ‘// Comentario de código’ | sed ‘//// c’ tanto la barra como el asterisco son meta-caracteres, es necesario escaparlos con la contrabarra “”. En Para esto mismo es también útil el comando “d” vez de agregar texto al final del patrón encontrado, (delete) que borra las líneas que coincidan con la puede insertarse texto en una línea previa usando expresión especificada: “i” (insert) en vez de “a”. Si quisiéramos agregar una línea antes y otra después del patrón, podemos sed ‘/cadena_o_expresion_regular/d’ agrupar los comandos, encerrándolos entre llaves “{“ y “}”. Claro que aquí hay que tener en cuenta algo que Es común el empleo de la orden “d” en conjunto con aclaramos antes: cada comando sed debe estar en los rangos que vimos antes. Es posible borrar las una única línea, y eso incluye tanto las llaves como los primeras 10 líneas de un archivo de esta manera: comandos agrupados en su interior. Para facilitar la escritura de este tipo de scripts sed, es conveniente sed ‘1,10d’ editarlos y grabarlos, para invocarlos posteriormente con el switch -f, como hicimos antes. ALGUNOS # Agrega líneas antes y después de un comentario EJEMPLOS //*/ { ÚTILES a n Siempre es bueno ver la aplicación de lo aprendido i en algo práctico. Aquí van algunos “one-liners” n útiles con sed. Debe tenerse en cuenta que hacen } un uso más avanzado de las expresiones regulares (un terreno complejo y fascinante por su utilidad, echo “/* Comentario de código */” | sed -f coment. que amerita una nota en sí mismo) que las aquí sed mostradas. Por ejemplo, se incluyen los meta- caracteres “^” (que representa el comienzo de una /* Comentario de código */ línea) y “$” (que representa el final de la misma). Otra posibilidad es cambiar la línea donde se encuentre Eliminar el espacio en blanco (espacios y el patrón con “c” (change) por el texto ingresado a tabuladores) al principio de una línea continuación de la orden, o ninguno si queremos sed ‘s/^[ t]*//’ eliminarlo. Para eliminar todas las líneas de comentario prefijadas con una doble barra (//) podemos usar: Ídem, pero al final de una línea:
  • 45. sed ‘s/[ t]*$//’ Ídem, pero tanto al principio como al final: sed ‘s/^[ t]*//;s/[ t]*$//’ Imprimir las líneas que contengan una expresión regular (igual que “grep”) sed -n ‘/regexp/p’ Eliminar todos los tags HTML de un archivo: sed -e ‘s/<[^>]*>//g’ index.html ... Y HASTA AQUÍ LLEGAMOS Aunque parezca demasiada información para una sola herramienta, lo cierto es que apenas hemos logrado rascar la superficie de lo que sed es capaz de hacer. Utilizando los comandos que vimos en conjunto, más otras funciones que por razones de espacio tuvimos que dejar afuera, se pueden lograr cosas muy interesantes. Es que para cubrir sed en su totalidad, al igual que para awk (al que dedicaremos la tercera parte de esta serie) no alcanzan unas pocas páginas, e incluso hay libros enteros escritos sobre el tema, tanto digitales como en papel. Por lo tanto, dejamos en las manos de los lectores el seguir profundizando sus conocimientos. Como se dice en el ambiente UNIXERO, el mejor administrador o desarrollador es aquel que adquiere la mayoría de sus conocimientos por la vía de la práctica y la experimentación. 45
  • 46. CHOQUE DE GIGANTES: FACEBOOK VS GOOGLE+ WEB 2.0 Y EL NUEVO CIBERESPACIO En los últimos tiempos se ha producido un notable cambio en el ciberespacio. A diferencia de los primeros tiempos de la web, ha comenzado a gestarse un fenómeno de masas al que suele referirse como Web 2.0. No más páginas que brinden información o servicios a usuarios pasivos, sino una transición que se ha dado de aplicaciones comunes y tradicionales hacia utilidades que funcionan a través de internet, específicamente la web, y todas ellas enfocadas al usuario final. Se trata de aplicaciones que generen colaboración y de servicios que reemplacen las aplicaciones de escritorio dando en todos los casos un papel activo a ese mismo usuario final. Podemos mencionar como algunos ejemplos los blogs, las wikis (especialmente la más conocida del mundo, Wikipedia) y una vasta gama de sitios en los cuales la presencia del usuario y su feedback es y serán esenciales. Y de todas las clases de aplicaciones que podemos referir, probablemente, las que más encarnan este nuevo espíritu de la red son las llamadas redes sociales. YouTube, Twitter, Orkut: todas ellas se nutren de los usuarios y son ellos los que brindan el contenido a la red, no la red la que se los provee a ellos en su tradicional rol de consumidores pasivos de la información. Subiendo el video que realizó, comentando un suceso o actualizando su perfil, el usuario es el creador de su propio rostro de cara al mundo.
  • 48. 48 Es aquí cuando mencionamos al fin a la red social más conocida, Facebook. En ella se resume la web de hecho para muchos usuarios, y desde sus humildes orígenes a la fecha ha crecido exponencialmente en cantidad de usuarios y, sobre todo, en participación de los mismos. Y eso es la clave de su éxito, más allá de sus cualidades técnicas, ya que para toda red social la participación de sus usuarios es fundamental, la sangre que le da vida. Porque, ¿qué es una red social sin tráfico de información entre usuarios, sean estas opiniones, fotos, videos u otros recursos? La experiencia y la lógica nos dicen que nada en absoluto. Por eso, Facebook creció a pesar de que muchos usuarios se quejaban (y lo siguen haciendo) sobre aspectos fallidos como ser la interfaz, la privacidad, los frecuentes cambios de apariencia, etc. Simplemente “hay que estar ahí” a fin de mantener el contacto, y ese efecto de masa crítica constituye su bien más preciado y, por cierto, más envidiado por el resto de los jugadores de la red.
  • 49. Ahora bien, la empresa líder de Internet es sin duda a través de la creación de un sitio donde vincular gente la omnipresente Google, dueña y señora de todos los y sus historias. De todos modos, el principal fundador caminos. Es muy sabido que si no está en Google y actual líder de la empresa, Mark Zuckerberg, ha o, mejor dicho, en sus búsquedas, no existe – como denostado la película afirmando: «Es divertido lo que se afirma la sabiduría popular de la red. Sin embargo, han empeñado en mostrar de forma acertada, porque el crecimiento de Facebook ha sido tan firme que la todas las camisetas y todas las camperas que salen en importancia de su porción de torta se ha tornado, a la la película, son camisetas y camperas que tengo. Hay vez, atractiva y amenazante para Google, la cual con las otras cosas que hicieron bien pero otras, en cambio, compras de YouTube y Orkut inició su propia avanzada que hicieron mal. Lo que peor está es el principio de la en el terreno de las redes sociales, con notable éxito película. Empieza con una chica que nunca existió en la en ambas. Sin embargo, nunca logró hasta este vida real y que en teoría me deja. momento desbancar en su propio terreno a Facebook y los intentos de clonarla dentro del mundo Google han Algo que ha pasado en la vida real muchas veces,» resultado sonoros fracasos. agrega mordazmente. «Parece que la única razón por la que quería hacer Facebook era porque quería conocer En el mundo de los negocios, y especialmente de chicas, o porque quería entrar en alguna institución Internet y la tecnología, no avanzar es retroceder y social. Creo que eso es bastante significativo de cómo retroceder es a la larga morir. Por eso está planteado la gente que hace películas nos ve a los que estamos el escenario para una lucha de gigantes entre creando cosas en Silicon Valley. Parece que no se dan Facebook y Google, de la mano de la más nueva cuenta que hay gente que construye cosas porque les creación de esta última: Google+, su gran apuesta gusta construir cosas,» concluye su análisis el líder por el control del ciberespacio. de Facebook. En definitiva, lo realmente cierto es que tras unos comienzos mínimos como sitio de encuentro Este es, probablemente, el momento para “triunfar o entre estudiantes de la universidad estadounidense de morir” para Google, al menos para las aspiraciones Harvard, Facebook se expandió al mundo entero. del gigante en los medios sociales. Facebook ya está suficientemente establecido en sí mismo como el Con un formato en general fácil de entender y líder sin disputa entre las redes sociales, y por cierto manejar por no expertos, Facebook es una forma está bien encaminado en su meta de entretejerse a sí sencilla de mantenerse en contacto y compartir toda mismo en la mismísima “tela” de la red de redes. Si clase de cosas con amigos, sean videos, comentarios Google falla en este lance, es posible que ya no tenga o juegos. Con muy buena visión de negocio, los una segunda oportunidad para volver a luchar. La directivos de la red social han liberado una API que pregunta en la mente de todos es si Google al fin se permite a terceros invertir en aplicaciones incluso tornará “social” y tendrá éxito en desafiar a su rival. con fines lucrativos, transformando así a Facebook en un vehículo donde muchos generadores de contenido se encuentran con usuarios de todo tipo. Y EN ESTA Finalmente, en los últimos tiempos ha empezado ESQUINA... a incrementarse el número de empresas deseosas de tener presencia en Internet a través de lo que Los contrincantes tienen al observarlos en detalle Facebook puede proporcionarles: comunicación y muchas similitudes producto, en muchos casos, de una magnífica vidriera al mundo. la observación del rival y de los comunes objetivos. Y también no menos significativas diferencias provenientes de las diferentes etapas de evolución y ambientes corporativos. La historia de Facebook es en general bien conocida, habiendo tenido incluso su toque de épica con la película The Social Network. En ella se muestra a un grupo de jóvenes emprendedores que, tras muchas vicisitudes, logran quebrar su relativo ostracismo social 49