Documento Nod Up

Embed Size (px)

Citation preview

  • 5/28/2018 Documento Nod Up

    1/380

    historias de developers

    Un libro para developers y sus jefes

    Publicado por Lulu.com

    ISBN: 978-1-4466-2883-6

  • 5/28/2018 Documento Nod Up

    2/380

  • 5/28/2018 Documento Nod Up

    3/380

    licencia

    Usted es libre de:

    copiar, distribuir y comunicar pblicamente la obra

    Bajo las condiciones siguientes:

    Reconocimiento: Debe reconocer los crditos de la obra de la maneraespecificada por el autor o el licenciador (pero no de una manera quesugiera que tiene su apoyo o apoyan el uso que hace de su obra).

    No comercial:No puede utilizar esta obra para fines comerciales.

    Sin obras derivadas: No se puede alterar, transformar o generar una obraderivada a partir de esta obra.

    Entendiendo que

    Renuncia:Cualquiera de las condiciones anteriores puede ser eliminada si seobtiene permiso del autor que ostenta los derechos.

    Para ms informacin:

    http://creativecommons.org/licenses/by-nc-nd/3.0/es/legalcode.es

    http://www.google.es/url?sa=i&rct=j&q=&esrc=s&frm=1&source=images&cd=&cad=rja&docid=3tNBUBbp_PZ0nM&tbnid=lYh4gheYHYXmFM:&ved=0CAUQjRw&url=http://www.lib.umich.edu/copyright/using-cc-licensed-material&ei=F0kTUeWaEqeq0AXixIDwDQ&bvm=bv.42080656,d.d2k&psig=AFQjCNHNxdzvokVzOaC4fZvcaKi6ku8SBw&ust=1360304763084713
  • 5/28/2018 Documento Nod Up

    4/380

  • 5/28/2018 Documento Nod Up

    5/380

    crditos

    Coordinacin:

    Alberto de Vega Luna y Rafael de las Heras del Dedo

    Autores:

    Carlos Domingo Soriano Josep Lluis Jimnez Castelltort Juan Lambea RuedaDiego Gonzlez MartnezRafael Pelln Gomez-Calcerrada

    Jess Gumiel Ramrez Alberto de Vega Luna Jess Manuel Gonzlez EspinillaStefano Marinelli Daniel Micol Ponce Sebastin Ortega Torres

    Miguel ngel Santiago Cabello Juan de Bravo DezJonatan Tierno AlviteEduardo Alonso Garca Ral Cumplido Domnguez Marina Serrano Montes

    Rafael de las Heras del Dedo Toni Cebrin Chuli Fernando Navarro GilFrancisco Jess Gmez Rodrguez Joaqun Guanter Gonzlbez

    Roberto Prez CuberoJuan Roldn Parra Germn Toro del ValleFernando Rodrguez SelaGuillermo Lpez Leal

    Rubn Gonzlez BlancoSalvador de la Puente Gonzlez Cristina Santa Cecilia

    Portada, comics y diseo grfico:

    Cristina Santa Cecilia

    Maquetacin:

    Alberto de Vega Luna

    Tag Clouds generadas con Tagul.com

  • 5/28/2018 Documento Nod Up

    6/380

  • 5/28/2018 Documento Nod Up

    7/380

    aviso

    Todos los que aqu escribimos somos empleados de Telefnica I+D. Losartculos que puedes encontrar en este libro no deben tenerse en cuentacomo la voz oficial de Telefnica. No obstante, el lector debe conocernuestra vinculacin laboral con Telefnica a la hora de juzgar la

    imparcialidad de nuestros contenidos.

  • 5/28/2018 Documento Nod Up

    8/380

  • 5/28/2018 Documento Nod Up

    9/380

    ndice

    prlogo............................................................................................................................ 13

    por Carlos Domingo

    sobreingeniera, el enemigo en casa............................................................. 19

    por Josep Lluis Jimnez Castelltort

    la creatividad en el diseo y desarrollo de software..................... 27

    por Juan Lambea Rueda

    mejores prcticas en APIs en REST: uso pragmtico......................... 35

    por Diego Gonzlez Martnez

    map reduce: el camino hacia bigdata........................................................... 45

    por Rafael Pelln Gomez-Calcerrada

    de apple pie a jelly bean: la dulce historia de Android..................... 59

    por Jess Gumiel Ramrez

    la comunicacin, ese gran desconocido...................................................... 71

    por Alberto de Vega Luna

    cmo la programacin genrica puede ayudar a reducir el

    volumen de cdigo.................................................................................................... 81

    por Jess Manuel Gonzlez Espinilla

  • 5/28/2018 Documento Nod Up

    10/380

    10

    desarrollo personal................................................................................................ 93

    por Stefano Marinelli

    procesos para escribir cdigo mantenible y estable....................... 103

    por Daniel Micol Ponce

    la programacin funcional te hace ms fuerte...................................... 111

    por Sebastin Ortega Torres

    relaciones de cdigo con un desarrollador en un entorno de

    innovacin................................................................................................................... 123

    por Miguel ngel Santiago Cabello

    crear un sitio web o un blog con contenido esttico

    es posible..................................................................................................................... 131

    por Juan de Bravo Dez

    apologa del reboot frente al refactor..................................................... 145

    por Jonatan Tierno Alvite

    importancia del unit testing en el cdigo................................................ 159

    por Eduardo Alonso Garca

    debugging & profiling: garanta del funcionamiento de un

    programa..................................................................................................................... 169

    por Ral Cumplido Domnguez y Marina Serrano Montes

  • 5/28/2018 Documento Nod Up

    11/380

    11

    1, 2, 3, estima!...................................................................................................... 183

    por Rafael de las Heras del Dedo

    programacin usando actores........................................................................ 197

    por Toni Cebrin Chuli

    qu podemos aprender de las industrias del cine

    y del videojuego....................................................................................................... 207

    por Fernando Navarro Gil

    hackers, ellos tambin son developers..................................................... 217

    por Francisco Jess Gmez Rodrguez

    utiliza tu lenguaje.................................................................................................... 231

    por Joaqun Guanter Gonzlbez

    alternativas al desarrollo mvil................................................................... 243

    por Roberto Prez Cubero

    anlisis de seguridad en el cdigo............................................................... 265por Juan Roldn Parra

    la motivacin del desarrollador.................................................................... 277

    por Germn Toro del Valle

    servidor de notificaciones push de open web device..................... 291

    por Fernando Rodrguez Sela y Guillermo Lpez Leal

  • 5/28/2018 Documento Nod Up

    12/380

    12

    entendiendo y gestionando el desarrollo de software................... 309

    por Rubn Gonzlez Blanco

    christmas tree........................................................................................................ 327

    recopilado por Salvador de la Puente Gonzlez

    bola extra: 5 claves para comprender a un diseador................ 369

    por Cristina Santa Cecilia

  • 5/28/2018 Documento Nod Up

    13/380

    prlogo

    por Carlos Domingo

  • 5/28/2018 Documento Nod Up

    14/380

  • 5/28/2018 Documento Nod Up

    15/380

    En estos momentos en el mundo estamos ante una transformacintecnolgica que solo tiene antecedentes en la revolucin industrial delsiglo XIX. En los ltimos diez aos hemos visto cmo finalmente

    Internet y, ms recientemente, los telfonos inteligentes hanrevolucionado todos los aspectos de nuestras vidas y de nuestra forma detrabajar, desde cmo hacemos una reserva de hotel o de un vuelo a cmopedimos un taxi desde un smartphoneviendo en tiempo real en un mapadnde est y cundo va a llegar a donde estamos. Productos que hastaahora no han cambiado de forma sustancial en los ltimos aos como losmapas, los libros, los monederos, los coches o las gafas, estn siendoreinventados y transformados en esta nueva era digital. Y debajo de toda

    esta revolucin est el software. Y las empresas que sobrevivan y sereinventen para triunfar en este mundo digital al que nos estamosdirigiendo sern las empresas que entiendan y dominen el software. Comodecan recientemente en un artculo en Forbes, hoy en da todo el mundoes una compaa de software y eso fue algo que entendimos en sumomento y que nos pusimos a ejecutar para completar esatransformacin.

    Cuando llegu al centro de Barcelona de Telefonica I+D en 2006recin contratado, haba un trmino comnmente usado en la compaaque yo desconoca y que me cost un poco entender. Era el llamado"apalancamiento". Ese trmino se refera a cuntos desarrolladores desoftware tenas subcontratados por cada empleado propio de la compaa.Como los subcontratados eran "ms baratos", pues las propias finanzas dela empresa te forzaban a tener cierto nivel de apalancamiento en tu

    presupuesto anual para poder llevar a cabo los proyectos sin salirte delmismo. Y esos niveles de apalancamiento eran del orden de 1 a 6, es decir,haba 6 desarrolladores subcontratados por cada empleado propio. Enresumen: el desarrollo de software no se vea como una actividad corey sesubcontrataba de forma masiva, intentando adems hacerlo lo ms baratoposible. Para colmo, el laboratorio de Barcelona de Telefnica I+D parael cual yo haba sido contratado como director estaba siendo usado comopiloto para certificacin de CMMI21. Y, finalmente, en Telefnica I+D no

    exista una carrera profesional tcnica (en contra de lo que el nombre de laempresa pudiera indicar) y solo una de gestin, con lo que los mejores

    1http://es.wikipedia.org/wiki/Capability_Maturity_Model_Integration

    http://es.wikipedia.org/wiki/Capability_Maturity_Model_Integrationhttp://es.wikipedia.org/wiki/Capability_Maturity_Model_Integration
  • 5/28/2018 Documento Nod Up

    16/380

    16

    perfiles tcnicos y de desarrollo acababan pasndose a tareas de gestinpara poder promocionar y progresar profesionalmente en la empresa.

    El trabajo para el que haba sido contratado consista, en trminosgenerales, en crear servicios innovadores ms all de la conectividad, confoco en servicios de Internet y multimedia, algo que empez con elgermen del centro de Barcelona de Telefonica I+D. En aquella pocahaba unas 40 personas dedicadas a estos temas y durante los aos hemosido haciendo crecer esta actividad hasta dar lugar a la unidad de desarrollode producto e innovacin de Telefonica Digital de hoy en da dondetenemos ms de 1.000 profesionales en 5 centros en Espaa as como

    centros en Israel, Reino Unido, Brasil y California. Como os podisimaginar, innovar en ese tipo de servicios (fundamentalmente serviciosbasados en software) sin tener tus propios desarrolladores y conmetodologas waterfall como CMMI2 iba a ser algo muy complicado asque lo prioritario era cambiar la forma de trabajar, la metodologa, losperfiles, crear una nueva carrera profesional para ellos, etc.

    As que mi equipo y yo nos pusimos manos a la obra con esta tarea.

    Durante estos aos, hemos ido contratando ms desarrolladores desoftware y formando a los que ya tenamos, cambiando la metodologapara abandonar el CMMI2 y pasarnos a metodologas giles (Scrum enconcreto) as como reforzar las otras disciplinas complementarias eigualmente necesarias para llevar a cabo el desarrollo de software conxito como el grupo de experiencia de usuario, el departamento de QA,etc. Por otro lado, en 2007 Telefonica I+D cre una carrera tcnica para

    dar oportunidades de promocin profesional y reconocimiento a losperfiles tcnicos y de desarrollo que no queran convertirse en gestores.

    Y as es cmo nos convertimos en una empresa de software deverdad. El resto es historia y desde entonces la transformacin de lacompaa ha sido increble y este libro es un testimonio de esatransformacin. En l, podis leer las historias de los developers de

    Telefonica I+D donde a da de hoy podemos decir que la cultura del

    desarrollo de software ya forma parte de la cultura central de la compaa.Es un libro para developers escrito por developers donde se tratan todotipo de temas, desde algunos ms tcnicos como el uso de APIs en RESTa otros ms culturales como el evitar la sobreingeniera o mejorar la

  • 5/28/2018 Documento Nod Up

    17/380

    17

    comunicacin, pasando por temas de rabiosa actualidad empresarial comola historia de Android, las nuevas tecnologas de bases de datos norelacionales o el trabajo que estamos desarrollando conjuntamente con

    Mozilla sobre Firefox OS.

    Espero que lo disfrutis tanto como lo he hecho yo.

    Carlos Domingo (Barcelona, 1971) es director dedesarrollo de productos e Innovacin, as como

    miembro del consejo de Telefnica Digital ypresidente y consejero delegado de TelefnicaInvestigacin y Desarrollo. Es adems miembro de losconsejos de administracin de Jajah, Tuenti y TokBox.Doctorado en Ingeniera Informtica por la UPC, yMster en Ingeniera Informtica por el TokyoInstitute of Technology, ha cursado tambin estudiosde postgrado en direccin de empresas en la Stanford

    Graduate School of Business.Durante el poco tiempo libre del que dispone, es unmentor de startups y ngel inversor en ms de 10startups de tecnologa.

  • 5/28/2018 Documento Nod Up

    18/380

  • 5/28/2018 Documento Nod Up

    19/380

    sobreingeniera, el enemigo en casa

    por Josep Lluis Jimnez Castelltort

  • 5/28/2018 Documento Nod Up

    20/380

    20

  • 5/28/2018 Documento Nod Up

    21/380

    21

    La sobreingeniera y sus consecuencias

    La sobreingeniera es la consecuencia de desarrollar intentando dar

    solucin a funcionalidades futuras. Pasa en las mejores familias. A quinno le ha ocurrido esto alguna vez? A m personalmente, unas cuantas.

    La experiencia nos dice que los requisitos de un proyecto suelencambiar y esa es una realidad que hemos de asumir desde el inicio deldesarrollo. Los cambios realizados durante la fase de desarrollo implicanmodificar, adaptar o incluso desechar partes del cdigo implementado.Por lo tanto, desarrollar teniendo en cuenta tanto el espacio contexto

    concretocomo el tiempopensar demasiado en el futuro- no parece unabuena idea.

    Imaginemos que estamos desarrollando un componente propiopara nuestra aplicacin, una librera open source o un plugin para nuestroframework favorito. En estos casos, solemos implementar funcionalidadextra porque creemos que nos ser til ms adelante. Todo un clsico enel mundo software.

    El resultado final es la acumulacin de fragmentos de cdigo quenunca van a ser usados. Estamos engordando el nmero de lneas ydificultando la legibilidad. Esto es nefasto a nivel individual y mucho msa nivel de equipo.

    Recapitulando, estas son las consecuencias de aplicarsobreingeniera en nuestro diseo software:

    1. Mayor coste de tiempo (en su implementacin) y en consecuencia,de presupuesto

    2. Aumento de la complejidad del cdigo hacindolo menos legible ymenos mantenible

    3. Peor rendimiento de la aplicacin (dependiendo de la complejidadaadida)

    4. Aumento del riesgo a tener nuevos bugs ya que hay funcionalidadque nunca se prueba

    Suena bastante mal, verdad? Cmo podemos protegernos de loscambios sin caer en las garras de la sobreingeniera?

  • 5/28/2018 Documento Nod Up

    22/380

    22

    Alternativas para protegernos de los cambios

    En esta seccin vamos a ver una serie de principios y buenas

    prcticas que nos ayudarn a desarrollar un cdigo ms a prueba decambios.

    Empecemos viendo un par de tcnicas para mejorar nuestracomunicacin e interaccin con el personal (cliente) que se encarga dedefinir los requisitos.

    El mtodo MoSCoW (Must, Should, Could, Wont)

    Se aplica antes de iniciar la fase de desarrollo y sirve para priorizarlos requisitos de las entregas en 4 niveles:

    1. Mnimos para considerar la entrega completada (Must)2. Importantes pero negociables (Should)3. Deseables pero no prioritarios (Could)4. Descartados para esta entrega (Wont)

    Con este mtodo se fija el alcance del producto a priori y as seevitan malentendidos en el momento de la entrega. Adems, elcumplimiento de los tres primeros puntos nos puede servir paracuantificar el xito del entregable.

    La filosofa RERO (Release Early, Release Often)

    Esta filosofa apuesta por una poltica de despliegues muy

    frecuentes para poder recibirfeedbackdel usuario o cliente lo antes posible.Esta forma de trabajar suele utilizarse en entornos cerrados donde

    el acceso est restringido a los desarrolladores, el equipo de pruebas yalgunos usuarios finales, pero algunas veces, sobretodo en startups,tambin se usa en entornos de produccin.

    La finalidad de esta metodologa es no desviarnos de lo que elcliente realmente quiere. Al tener un entorno siempre actualizado con losltimos cambios, ste tiene la oportunidad de supervisar los avances ydetectar cualquier desviacin en la entrega.

  • 5/28/2018 Documento Nod Up

    23/380

    23

    La experiencia nos demuestra que seguir estas tcnicas se acabatraduciendo en una clara mejora en la relacin desarrollo - producto queacaba resultando beneficiosa para ambas partes.

    Una vez cubiertos los requisitos, veamos cmo mejorar nuestrashabilidades de programacin a travs de tres de los principios mspopulares del mundo del desarrollo:

    DRY Dont Repeat Yourself: No repitas cdigo, abstrelo yresalo.

    KISS Keep It Simple, Stupid!: Mantn tu cdigo simple y evitacomplejidad innecesaria.

    YAGNI YouAint Gonna Need It: No aadas ninguna funcionalidadque no vayas a usar.

    Pueden sonar triviales pero aplicarlos en el da a da no es tan

    sencillo como parece. Las fechas de entrega juegan en nuestra contra y suaplicacin suele posponerse a la fase de refactor, una de las ms importantesdel ciclo de desarrollo.

    Veamos una serie de consejos prcticos para cumplir estosprincipios en la siguiente tabla.

    DRY Usa patrones de diseo software, en especial los estructurales

    como por ejemplo el adaptador (Adapter), el objetocompuesto (Composite) o el envoltorio (Decorator).

    KISS Evita el spaghetti code2 dividiendo las funciones enormes ensubfunciones y minimiza las dependencias siempre quepuedas.

    YAGNI Escribe las pruebas primero (Test First Development) y desarrollael cdigo despus. Esta prctica se conoce como Test-DrivenDevelopment(TDD)3.

    2Cdigo spaghetti:http://es.wikipedia.org/wiki/C%C3%B3digo_spaghetti3http://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebas

    http://es.wikipedia.org/wiki/C%C3%B3digo_spaghettihttp://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebashttp://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebashttp://es.wikipedia.org/wiki/C%C3%B3digo_spaghetti
  • 5/28/2018 Documento Nod Up

    24/380

    24

    Para terminar, no podemos olvidarnos del anti-patrn RSW

    (Reinventing the square wheel).Este se cumple cuando desarrollamos una funcionalidad que ya nos

    proporciona una solucin existente (reinventar la rueda) y obtenemos unresultado peor (rueda cuadrada).

    Tal y como hemos visto en el principio DRY, es muy importanteno repetir nuestro cdigo, y como acabamos de ver, es igual de

    importante no repetir el de los dems. Reutilizar cdigo de fuentes fiablessuele ahorrarnos mucho tiempo y un buen nmero de bugs.

    En definitiva, reinventemos la rueda cuando las solucionesexistentes no satisfagan nuestras necesidades o cuando queramos aprenderms sobre ruedas.

    Conclusiones

    El propsito de este artculo es analizar la sobreingeniera, uno delos problemas que surgen durante la fase de desarrollo de cualquierproyecto software, y buscar alternativas para evitarla o minimizar almximo su impacto.

    Para entender mejor la sobreingeniera hemos visto lasconsecuencias de aplicarla y se han expuesto varias propuestas paraevitarla en dos mbitos distintos: comunicacin y programacin.

    Existen ms propuestas al respecto e incluso algunas quecontradicen a las expuestas. No hay que olvidar que el desarrollo softwareno es una ciencia exacta y como sucede en otros sectores, como laeconoma o la medicina, no todos los expertos se ponen de acuerdo encul es la mejor forma de afrontar los problemas ms comunes.

  • 5/28/2018 Documento Nod Up

    25/380

    25

    Pepe (Barcelona, 1984) es desarrollador en TelefnicaI+D. En su corta vida profesional ha programado,diseado, maquetado, flirteado con arquitecturas varias

    e incluso ha intentado emprender montandoBuscopista, una startup relacionada con el mundo deldeporte. Entusiasta del cdigo abierto y del trabajocooperativo, colabora en proyectos sin nimo de lucroen su tiempo libre.

  • 5/28/2018 Documento Nod Up

    26/380

  • 5/28/2018 Documento Nod Up

    27/380

    la creatividad en el diseo

    y desarrollo de softwarepor Juan Lambea Rueda

  • 5/28/2018 Documento Nod Up

    28/380

    28

  • 5/28/2018 Documento Nod Up

    29/380

    29

    Qu es la creatividad?

    La creatividad segn la Real Academia Espaola de la lengua4, es la

    facultad de crear o capacidad de creacin. As que como esto no nos dicemucho, veamos qu significa el verbo crear (proviene del latn crere)segn la misma fuente:

    1. Producir algo de la nada2. Establecer, fundar, introducir por vez primera algo; hacerlo nacer o

    darle vida, en sentido figurado. Crear una industria, un gneroliterario, un sistema filosfico, un orden poltico, necesidades,derechos, abusos.

    Esta definicin ya s que nos ofrece un detalle aplicable 100% anuestra profesin de desarrollo de software. Cualquier ingeniera otorga alestudiante unos mnimos conocimientos y capacidades para resolverproblemas, adems de ofrecer las herramientas bsicas para que se ejecutela implementacin de un proceso creativo. Porque el desarrollo desoftware es algo muy creativo y debemos convencernos de ello.

    Realmente esto enlaza directamente con lo que llamamosinnovacin y aqu est una de las claves de la creatividad. Puede habermuchas ideas, productos, servicios, programas o aplicaciones nuevas peropocas de ellas pueden ser innovadores. Por otro lado, a veces pasa locontrario y es que realmente la innovacin no se encuentra en la creacinen s, sino en la ejecucin, implementacin y desarrollo de algo yaconocido o implementado por otro. En este ltimo caso se puede ofrecer

    un valor aadido difcil de superar en el mercado aplicando la excelenciaen la implementacin en algn aspecto realmente diferencial. Un ejemplode sobra conocido son los productos de Apple, ensalzados por unos ycriticados por otros: en muchos casos la creatividad e innovacin queaportan es bsicamente, la excelente implementacin de un valor aadidoque es clave: la experiencia de usuario.

    4http://www.rae.es/

    http://www.rae.es/http://www.rae.es/
  • 5/28/2018 Documento Nod Up

    30/380

    30

    El proceso creativo de un producto

    Hoy en da se producen muchsimos avances a diario y se innova

    constantemente. Parece que es muy difcil encontrar una idea para unproducto que realmente sea innovador, pero tampoco hay que encontrarsefrustrado. Muchas veces la innovacin proviene de enlazar creaciones eideas existentes que aportan un valor y aplicacin nuevos al encontrarsejuntas. Hay que resaltar que no estamos hablando de copiar productos oservicios que ya existan en el mercado sino de enlazar conceptos oproductos que, al estar integrados, aportan un novedoso valor aadido.

    As pues, no es cuestin de encontrar la idea feliz sino ms bien de

    tener un conocimiento previo de otros productos o servicios novedososque existan en el mercado y que juntndolos creen algo nuevo yrevolucionario.

    Como vemos, la estrategia a medio o largo plazo consta de untrabajo de fondo de investigacin y conocimiento de los productos quehay en el mercado, aunque obviamente hay chispas de creatividad queacaban en el lanzamiento de productos totalmente disruptivos y

    novedosos.

    Diseo del software y creatividad

    En el diseo de la arquitectura de los sistemas a alto nivel siemprehay que tener en cuenta el estudio previo de soluciones exitosas que sehan aplicado con anterioridad. Es decir, antes de poder innovar y sercreativos en aspectos de diseo tiene que existir un estudio previo de otras

    arquitecturas que hayan funcionado no solo sobre el papel (por ejemplo,patrones de diseo). Como se dice mucho en el mundo del desarrollohacer cajas es muy fcil.

    Desde mi punto de vista es muy importante que las personasencargadas de realizar los diseos hayan experimentado el esfuerzo deldesarrollo software para tener conciencia de las implicaciones en cambiosde diseo y esa experiencia debe haber sido real, con productos que han

    estado en produccin en los que hayan surgido problemas reales,urgencias, cambios de requisitos, etc.

  • 5/28/2018 Documento Nod Up

    31/380

    31

    Todos tendemos a olvidar el esfuerzo necesario para realizartrabajos pasados y esta experiencia ayuda a recordar que las elecciones enel diseo pueden tener consecuencias de peso en nuestros productos.

    Adems, estas elecciones permiten tomar conciencia de la deuda tcnicaen la que se suele incurrir al disear y no implementar ciertascaractersticas tcnicas necesarias en nuestros productos. Caractersticasque por cuestiones de priorizacin a veces se relegan a un segundo otercer plano y no se implementan. Esto es un riesgo real que aumenta conel tiempo y crecimiento del producto y nueva funcionalidad.

    Por otro lado, a nivel de diseo de software, constantemente hay

    nuevas tendencias y un error muy comn por querer construir algonovedoso a nivel tcnico es el adoptar para todo las tecnologas que estnen boga en un momento determinado. La creatividad en el diseo desoftware tiene que ir de la mano de los requisitos del producto. Es decir,podemos pensar en un diseo muy creativo y novedoso pero no olvidarciertas restricciones en relacin a la implementacin del producto queinvalidan dicha solucin en un momento dado.

    Un ejemplo muy claro es la necesidad de tener en cuenta la variabletiempo. Habitualmente el xito en el lanzamiento de un producto dependeentre otros factores del momento de oportunidad. La ventana deoportunidad en el tiempo es crucial y est marcada por nuestroscompaeros de marketing y negocio, cuyo conocimiento debe estarcompartido con el equipo tcnico para que todos los implicados en laconstruccin del producto tengan conciencia del time to market(el tiempo

    que se tarda en llegar al mercado).

    Tambin para ser creativo en relacin al diseo creo importante loque comnmente se llama tener la mente abierta. Parece algo obvio, perocon el trabajo diario, tendemos a especializarnos y profundizar entecnologas y en diseos, de forma que retrasamos los cambios sin poderevitarlo.

    De alguna forma hay que abstraerse de nuestra experiencia pasada ypensar en cmo podramos resolver esos mismos problemas cambiando elfoco. Esto no quiere decir que siempre sea necesario realizar cambios enel diseo para cosas que funcionan demostradamente. Pero en cualquier

  • 5/28/2018 Documento Nod Up

    32/380

    32

    caso ese ejercicio de anlisis cambiando el foco es muy valioso pues puedeaportarnos puntos de vista que anteriormente no habamos tenido encuenta. Como deca Albert Einstein: "Si quieres resultados distintos, no

    hagas siempre lo mismo".

    Actualmente est en auge en psicologa lo que se conoce comoPNL (programacin neuro-lingstica). Bsicamente permite reeducarciertos comportamientos no muy asertivos para cambiar y obtenermejores resultados a todos los niveles. Relacionado con estos temasrecuerdo hace unos aos el libro Quin se ha llevado mi queso que permiteextraer conclusiones sobre cmo enfrentarnos al cambio constante y lo

    que aporta tener esa predisposicin al mismo (ya que la vida es un cambioconstante).

    Desarrollo e implementacin de software,

    creatividad y realidad

    En relacin a la implementacin de software, generalmente aplicalo comentado a nivel de diseo anteriormente. Podemos ser muy creativos

    definiendo una arquitectura de clases con un diseo magnifico, que seamuy acadmico, organizado, ordenado e incluso elegante. Pero si al hacerunas pruebas de prestaciones no cumplimos los requisitos del productopor haber demasiadas capas de clases o no estar lo suficientementeoptimizado de cara al rendimiento que debe ofrecer, no nos sirve de nada.O por ejemplo utilizar una base de datos no SQL (que no soporte ACID)para almacenar transacciones econmicas y tener un problema en

    produccin y perder el registro de dichas transacciones econmicas porfalta de transaccionalidad, integridad, etc (con el problema que estoimplica). Hay que tener en cuenta el contexto y contorno de cadacomponente a desarrollar dentro del producto y negocio en el que seencuentra as como la naturaleza de los datos que se manejan.

    Enlazando estas dos ltimas secciones, diseo e implementacincreativa de software, se puede aplicar el mismo principio o recomendacin

    siguiente: Si realmente crees que una tecnologa o implementacinnovedosa puede ser exitosa, antes de ponerte manos a la obra estudia,sopesa ventajas e inconvenientes y reserva un tiempo extra. Ese tiempoextra hay que contemplarlo en muchos aspectos que no suelen ser

  • 5/28/2018 Documento Nod Up

    33/380

    33

    despreciables en absoluto: nueva tecnologa en la que no tenemosexperiencia, un posible cambio de paradigma y un tiempo mnimo deadaptacin (desde el ms alto nivel hasta el ms bajo tcnicamente

    hablando), as como un tiempo extra final de validacin de tu nuevasolucin e implementacin.

    Es decir, antes de llevar a la prctica dicha implementacin hablacon tu equipo y con tus responsables para que se gestione laincertidumbre de tu apuesta. El equipo ha de ser consciente que esnecesario hacer un especial hincapi en el chequeo de la calidad desoftware y de pruebas de prestaciones. Realmente se trata de un ltimo

    paso forzoso de validacin de cara a realizar una serie de pruebas quegaranticen el resultado y el xito del componente dentro del producto.

    Por ltimo, resaltar que la toma de conciencia creativa en todos losaspectos de un producto, desde su concepcin hasta su implementacintiene mucha importancia. La implementacin a veces despreciada, muchas

    veces es ms creativa y constructiva que la propia definicin del producto.Todos sabemos que a veces llegan requisitos indefinidos al equipo de

    desarrollo. Por tanto, el desarrollador en este caso, conociendo las tripasdel producto se pone en el rol del creador del producto para concretar eserequisito. Se trata de una mezcla entre dar la mejor solucin tcnicaproporcionando una creatividad extra para contemplar adems de losrequisitos funcionales los requisitos tcnicos. As que es un trabajocomplejo que requiere un esfuerzo intelectual muy importante.

    Por este motivo se entiende que los programadores rehyen lasreuniones, evitan las interrupciones y necesitan mucha concentracin parasu trabajo. La prdida de esa concentracin implica perder y olvidar cosasque tienen en la cabeza y que pueden tener impacto en la implementacin.La tendencia actual de trabajar en espacios abiertos para este tipo de tareastan intensas - intelectualmente hablando - desde luego que no son unbeneficio para el desarrollador en este aspecto y es algo que debeconsiderarse con la perspectiva adecuada.

  • 5/28/2018 Documento Nod Up

    34/380

    34

    Juan Lambea (Madrid, 1972) es Solution Architect enTelefnica I+D. Inici su profesin realizandoprogramacin en diversos lenguajes as como otras

    labores junto al desarrollo de software: definicin dearquitecturas e interfaces, gestin de ofertas, gestin deequipos, consultoras, investigacin tanto en proyectosinternos de Telefnica como en proyectosinternacionales europeos, desde prototipos y pruebasde concepto hasta puesta en produccin y soporte.

    Tambin ha participado como coautor en la escritura

    de varios captulos del libro Service Level Agreements forCloud Computing(Springer ISBN: 978-1-4614-1613-55).

    5http://link.springer.com/book/10.1007/978-1-4614-1614-2/page/1

    http://link.springer.com/book/10.1007/978-1-4614-1614-2/page/1http://link.springer.com/book/10.1007/978-1-4614-1614-2/page/1
  • 5/28/2018 Documento Nod Up

    35/380

    mejores prcticas en APIs en REST:

    uso pragmticopor Diego Gonzlez Martnez

  • 5/28/2018 Documento Nod Up

    36/380

    36

  • 5/28/2018 Documento Nod Up

    37/380

    37

    Conceptos de REST: lo que todos sabemos y alguna

    cosa mas

    REST (Representational State Transfer6) no es un protocolo, sino unosprincipios de arquitectura, un estilo y unos patrones de diseo para ladescripcin de interfaces web. No hay unas normas completamentecerradas, sino una serie de guas que, si se siguen, permiten obtenerinterfaces o APIs RESTful. O RESTlike, si aplican las guas con algo deimaginacin y flexibilidad cuando REST no encaja como un guante al APIque se necesita implementar.

    Los conceptos bsicos de REST son los siguientes:

    Lo principal son los recursos. Un recurso es igual a una URI. La URIindica donde est el recurso, por ejemplo un libro en una biblioteca:

    http://mibiblioteca.com/biblioapi/v1/libros/libro1234

    De forma general, una URI puede identificar a dos tipos de recursos:una coleccin o un recurso individual. Una coleccin es simplementeuna agrupacin de recursos del mismo tipo.

    Las colecciones se deben nombrar en plural y con nombradosconcretos. Adems deben usarse nombres, puesto que el verbo lodefine el mtodo HTTP7. Los recursos individuales tienen su propioidentificador, que debe ser nico dentro de la coleccin. As, elidentificador del recurso sirve como indexador en la coleccin.

    Como hemos dicho, los mtodos HTTP sirven para realizaroperaciones sobre las colecciones y recursos. Los mtodos HTTPnos permiten operaciones CRUD: Create, Retrieve, Update y Delete.POST para Crear, GET para Obtener, PUT para actualizar yDELETE para borrar. Esto de forma bsica, pero siempre haymatices: qu ocurre si se intenta POST sobre un recurso que yaexiste? cmo puedo actualizar solo algunos atributos de un recurso?y borrarlos? debo permitir todas las combinaciones? Estos matices

    6Representational State Transfer (REST),

    http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm7RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1,

    http://www.ietf.org/rfc/rfc2616.txt

    http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htmhttp://www.ietf.org/rfc/rfc2616.txthttp://www.ietf.org/rfc/rfc2616.txthttp://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
  • 5/28/2018 Documento Nod Up

    38/380

    38

    y su solucin los veremos posteriormente desde un punto de vistapragmtico.

    Analizando temas algo ms avanzados, surgen aspectos como:

    Manejo de errores, que es un tema fundamental para obtener unbuen API. En REST lo fundamental es utilizar los cdigos de errorHTTP: 400 Bad Requestsi la peticin es sintcticamente invalida, 401Unauthorized para problemas de autenticacin, 403 Forbidden paraproblemas de autorizacin o limitacin por polticas, 404 Not Foundsi se intenta acceder a un recurso que no existe (o que se quiereocultar), 5xx cuando hay algn problema en el servidor. Otroscdigos se pueden usar, pero no es recomendable usar todos, sinoaquellos cuyo uso est ms extendido. Para complementar al cdigoHTTP es muy til incluir un bodyHTTP con un formato definidoque incluya por ejemplo el cdigo del error (til para la mquina), untexto descriptivo (para el humano) y una URL donde obtener msinformacin del error. Por ejemplo:

    HTTP 403 Forbidden

    Content-Type: application/json

    { "errorId": "SVC1000",

    "errorInfo": "Falta parmetro obligatorio: autor",

    "masInfo":

    http://mibiblioteca.com/biblioapi/v1/utils/error/svc1000 }

    Filtrados y bsquedas, tiles para obtener recursos de una coleccinque cumplan ciertos criterios y para obtener solo los atributos de losrecursos que se requieran. Tanto los filtrados como las bsquedas, ascomo la paginacin, se consiguen a travs de query strings o query

    parameters. Hay diferentes formas de conseguirlo; las siguientes sonformas sencillas y tiles:o Para obtener solo los atributos requeridos de un recurso, basta

    con incluir el query ?fields=param1,param2,param3o Para obtener solo los recursos que cumplan uno o varios criterios,

    basta con incluir el criterio como query: ?crit1=2&crit2=3,4.Diferentes valores y criterios pueden combinarse para obtenerlgica AND y OR.

  • 5/28/2018 Documento Nod Up

    39/380

    39

    o Para paginar, usando dos query parameters se puede hacer todo.Con un parmetro offsetse indica el desplazamiento en el listadode recursos y con un parmetro limitse indica el nmero mximo

    de resultados deseados.

    Un aspecto fundamental para el mantenimiento y evolucin de unAPI es elversionado. Existen muchas estrategias, pero una sencilla yrecomendable es incluir el nmero de versin del API en la propiaURL, justo despus del nombre del API. Cuando se hagan cambioscompatibles hacia atrs no se evoluciona la versin en la URL, solocuando se haga un cambio que haga incompatible la nueva versin

    con la antigua. Existen mtodos probablemente ms ortodoxos ypotentes como utilizar las cabeceras HTTP para sealizar la versindel recurso y las versiones soportadas. Estos mtodos tambin sonms complicados, y en un API REST la sencillez y usabilidad es piezaclave.

    Otro aspecto interesante es, cmo indicar la URL de un recursocuando ste es creado? Dos son las principales tcnicas: una esincluir una cabecera HTTP Location en la respuesta a la peticin decreacin del recurso. En la cabecera se incluye la URL donde se ha

    creado el recurso. Otra es incluir en la respuesta la representacin delrecurso creado, que incluir entre sus atributos el identificador delrecurso. O, de forma alternativa, devolver solo el identificador delrecurso en vez de su representacin completa. Una prcticarecomendable es incluir tanto la cabecera Location como elidentificador del recurso en el body HTTP; as se consigue de formasencilla una solucin vlida para distintos clientes, los que quieranhacer uso de cabeceras HTTP y los que no.

    Formatos y representaciones. El formato que mejor encaja en unAPI REST es JSON8, as que en general elgelo como formato derepresentacin de tus recursos. Tambin puedes hacer un API RESTrepresentando los recursos en XML9, y puedes asociar un esquemaque defina el XML para definir el tipo de tus recursos y sus atributos.Es posible que quieras ofrecer ambas representaciones, en cuyo casotienes que tener unas reglas claras para la transformacin entreformatos, lo cual puede no ser obvio salvo que fijes algunas reglascomo no usar atributos en XML.

    8JavaScript Object Notation (JSON), http://www.json.org/9Extensible Markup Language (XML),http://www.w3.org/XML/

    http://www.json.org/http://www.w3.org/XML/http://www.w3.org/XML/http://www.json.org/
  • 5/28/2018 Documento Nod Up

    40/380

    40

    Por ltimo, usar URLs sencillas y entendibles es fundamental.Recopilando los conceptos tratados en puntos anteriores, se obtieneel siguiente esquema:

    https://host:puerto/nombre/{version}/coleccion/{Id}?quer

    ies

    o nombre: sita aqu el nombre del API.o {version}: variable para indicar la versin del API, con las

    normas comentadas anteriormente.o coleccin: nombre en plural para indicar el nombre de la

    coleccin. Por ejemplo libros. Puede aadirse jerarqua adicionalcomo colecciones de colecciones. Pero conviene no abusar de lajerarqua, pues complica el entendimiento del API.

    o {id}: Variable con el identificador del recurso, que lo indexadentro de la coleccin.

    o queries: para filtrar o buscar (en GETs y DELETEs), paginar, etc.Las queries pueden situarse tambin detrs del nombre de lacoleccin, cuando definen escenarios aplicables a la coleccin.

    Uso pragmtico de REST: Situaciones y solucionesLas bases de REST son sencillas y claras, pero no siempre es obvio

    aplicarlas. Diferentes escenarios o casos de uso requieren un usoimaginativo de REST. No siempre se pueden aplicar las reglas a rajatabla,pero la solucin no es ni optar por soluciones no-REST ni obviar los

    principios de REST. La solucin es el REST pragmtico. Los siguientesson casos que pueden ocurrir a la hora de disear un API y sus soluciones,a veces obvias y a veces pragmticas:

    Restringir y elegir. No se debe permitir todo

    Aplicar CRUD sin contemplaciones puede suponer algunosproblemas. No hay que permitir CRUD totalmente, si alguna operacinno tiene sentido en tu API, simplemente restrngela. Tu API no sermenos REST porque no permita todas las operaciones CRUD.

  • 5/28/2018 Documento Nod Up

    41/380

    41

    Algunos escenarios no encajan como recursos, qu hacer?

    No intentes ser pragmtico nada ms empezar, piensa bien tus

    recursos tratando de ser RESTful. Si aun as sigue alguno de los escenariossin encajar como un recurso, diferncialo claramente. Cmo? Pon un

    verbo en tu URL e indica lo que hace esa URL. S, as estars rompiendolos principios de REST, pero estars siendo coherente puesto que no esposible modelar en un recurso tu escenario. A esto lo podemos llamaratajos de funcionalidad y algunos casos tpicos son clculos,conversiones o traducciones. Por ejemplo:

    http://miapi.com/diccionario/v1/traducir?texto=hola&de=ESP&

    a=ING

    Has aplicado un atajo? Lo has pensado bien, no? Una cosa es serpragmtico y otra es hacer trampas

    Crear un recurso 'eligiendo su identificador' frente a 'el

    servidor elige el identificador':

    Generalmente un recurso se crea con POST hacia la URI de lacoleccin. El servidor del API devolver el identificador del recurso enuna cabecera HTTPLocationo en elbodyde la respuesta 201 Created, o enambos.

    Pero algunos APIs requieren que el cliente que enva la peticin elijael identificador que indexa al recurso dentro de la coleccin. En este casoen vez de usar POST simplemente se usa PUT y en vez de enviarlo a laURI de la coleccin se enva a la URI del recurso a crear, poniendo elidentificador tras el nombre de la coleccin.

    No estamos inventando nada, es la definicin de lo que debe hacerun PUT segn el RFC de HTTP!

  • 5/28/2018 Documento Nod Up

    42/380

    42

    PUT para actualizar un recurso completo, POST y DELETE

    para actualizaciones parciales:

    Observando muchos APIs existentes esto suena raro, pero unabuena estrategia es usar PUT solo cuando se pretende sustituir un recursoenviando su nueva versin de forma completa. De nuevo, as debera sersegn la RFC de HTTP!

    Con POST se deberan hacer actualizaciones parciales: los atributosenviados sustituyen a los existentes en un recurso y si no existen los crean.

    No se borra nada.

    DELETE completa las actualizaciones parciales: los atributosindicados son borrados de la representacin del recurso

    De hecho, usa DELETE como GET:

    DELETE borrar lo mismo que obtendra un GET a la misma URL.Por ejemplo, si un GET con un queryobtiene solo ciertos atributos de unrecurso, un DELETE con el mismo queryborrar solo esos atributos deun recurso.

    Los atajos de usabilidad:

    Una vez implementado un API, pasa el examen de su usabilidad. El

    examen puede destapar carencias o fallos de diseo, pero tambin puedemostrar que hay algunos casos especiales: una operacin que es utilizadamucho ms que cualquier otra, una combinacin de POST+DELETEque se hace constantemente, un GET previo que sea necesario para poderhacer una actualizacin, etc.

    Si alguno de estos casos ocurre en el API, es razonable aadir un

    atajo de usabilidad. De nuevo, aunque no sea RESTful, es pragmtico yrazonable aadir un verbo a la URL y exponer tal cual esa funcionalidadespecial que tanto requieren los consumidores del API. No ser RESTful,

  • 5/28/2018 Documento Nod Up

    43/380

    43

    pero los consumidores del API tendrn exactamente la herramienta querequieren para la operacin que ms utilizan.

    Otros consejos:

    Las siguientes son otras decisiones que se pueden tomar, o no. Elcriterio es simplemente hacer lo que mejor encaje en tu API:

    En un GET a una lista, devuelve solo los indexadores. Generalmente no permitas una actualizacin a una coleccin, maneja

    los recursos uno a uno. Si permites DELETE a una coleccin, fuerza a que se metan

    criterios, permitir el borrado de una coleccin no suele ser buenaidea.

    Permite la actualizacin parcial (POST, DELETE) o completa(PUT), pero no ambas.

    Qu pasos seguir para definir un API REST, unprocedimiento

    Para definir un API REST, es posible seguir una metodologa comola siguiente:

    Identifica los recursos: colecciones y recursos individuales. Dibuja turbol de recursos, simplemente un esquema jerrquico dondevisualices las colecciones y recursos.

    Identifica las operaciones permitidas y las no permitidas sobre losrecursos.

    Intenta hacer todo RESTful, no busques los atajos. Detalla los recursos y los atributos de los recursos. Detalla los usos avanzados: filtrados, paginacin, bsquedas,

    borrados parciales, etc. Es normal que cuando detalles los recursos, sus atributos y sus usos,

    te des cuenta de errores en tu planteamiento. Haz iteraciones yvuelve al paso inicial tantas veces como sea necesario para cambiar lo

  • 5/28/2018 Documento Nod Up

    44/380

    44

    que sea necesario. Un API puede ser complejo, y es muy importanteconceptualizarlo bien.

    A la vez que defines el API, implemntalo. As conseguirs validar odesechar las decisiones de diseo. No se debe ni disear un API queno se valide implementndolo ni implementar sin haber trabajadomnimamente en el diseo.

    Ya est? Revisa qu no ha encajado bien, qu queda forzado o quno has podido modelar. Solo en ese caso, aade los atajos defuncionalidad. Si has llegado a este paso rpidamente y tienes queaadir muchos atajos, entonces no lo ests haciendo bien, vuelve a la

    casilla de salida! Ahora s, ya est. y luego? Usa el API, que lo usen otros y entre

    todos identificad sus carencias. Tal vez tengas que replantear algnconcepto.

    Haz un seguimiento del uso del API. Identifica los atajos deusabilidad. Extiende el API para soportar estos casos concretos.

    A lo largo de este artculo hemos visto unas pinceladas de REST, lobsico y algunos usos avanzados. Hemos visto tambin cmo algunasdecisiones pragmticas ayudan a definir APIs ms potentes y a la vezsencillas y operativas. Finalmente, hemos planteado una metodologa aseguir, que esperamos te sea til cuando tengas que definir un API REST.

    Diego Gonzlez (Vitoria, 1982) es Solution ArchitectenTelefnica I+D. A lo largo de su vida profesional ha

    trabajado en proyectos relacionados con SIP e IMS,habiendo contribuido en el organismo OMA en laestandarizacin de PoC (Push-to-Talk over Cellular) y enlos organismos OMA y GSMA en la estandarizacinde APIs REST de red. Actualmente se centra en laespecificacin y desarrollo del estndar de APIs de reden Telefnica (UNICA APIs), y realiza labores dearquitectura en el producto TuBlue y en laincorporacin de nuevos operadores de fuera delgrupo Telefnica al sistema de pagos contra facturamvil de BlueVia.

  • 5/28/2018 Documento Nod Up

    45/380

    map reduce: el camino hacia bigdata

    por Rafael Pelln Gomez-Calcerrada

  • 5/28/2018 Documento Nod Up

    46/380

    46

  • 5/28/2018 Documento Nod Up

    47/380

    47

    Introduccin

    Algunos conceptos: Big Data, Hadoop, Data Scientist y

    Map Reduce

    En la actualidad, nos rodea una gran cantidad de informacin por lairrupcin de fenmenos como las redes sociales, aplicaciones mviles,pginas web, comercio electrnico, localizaciones GPS, etc. Adems,existe otra informacin que procede de sensores instalados en aparatoscomo coches, trenes, aviones, autobuses, centrales de energa, incluso

    electrodomsticos,... para medir el rendimiento y las actividades de dichosaparatos. Por Big Data se hace referencia al tratamiento y anlisis deenormes cantidades de informacin (como la que mencionbamos en elprrafo anterior) que resulta imposible tratar empleando las herramientasde bases de datos y analticas convencionales. Tras este concepto seesconden las 4V que lo definen: Volumen (gran cantidad deinformacin), Variedad (mltiples fuentes), Velocidad (procesamiento entiempo real o en un tiempo razonable y finito) y Valor (bsqueda deconclusiones beneficiosas descartando la informacin no til).

    Apache Hadoop es un entorno de software de cdigo abierto quepermite desarrollar aplicaciones de computacin masiva permitiendo suejecucin de forma distribuida en hardware de bajo coste. Se basa en dostecnologas liberadas por Google conocidas como MapReducey Google FileSystem (GFS).

    MapReducees un paradigma de programacin para procesamientos dedatos en paralelo, basado en la combinacin de operaciones map y reducepara resolver un problema. Lo veremos en ms detalle en el siguienteapartado.

    El profesional capaz de analizar grandes volmenes de datosempleando tcnicas de Big Data y Anlisis (estadstica y lenguajes comoR) para proporcionar resultados valiosos para los departamentos denegocio se conoce como DataScientisto Cientfico de Datos.

  • 5/28/2018 Documento Nod Up

    48/380

    48

    Big Data: Una realidad ya

    Mltiples sectores estn adoptando soluciones Big Data. Los

    primeros en adoptarlas fueron los sectores de distribucin y financiero.Por ejemplo, la empresa US Xpress10realiz una optimizacin del uso desu flota de vehculos, reduciendo el tiempo de inactividad y el consumo decombustible basndose en la informacin obtenida de multitud desensores en sus camiones.

    En el sector financiero, nos encontramos, entre otras, aplicaciones

    para mejorar las capacidades de venta cruzadade productos, el controlde fraude y de ofertas personalizadas. Otros sectores donde se estempezando a aplicar son la medicina11, tanto para analizar patrones comopara prevenir enfermedades y las aseguradoras (para proporcionar mejoresofertas y ms personalizadas dependiendo de los patrones de uso).

    Finalmente, cabe destacar la iniciativa colaborativa The Human Face ofBig Data12. Se basa en la premisa de que la visualizacin en tiempo real de

    datos recopilados, en todo el mundo, por satlites, millones de sensores,etiquetas RFID, smartphonesy cmaras con GPS, permite a la humanidadpercibir, calcular, comprender e influir en aspectos de la existencia comonunca se hubiera imaginado: los hbitos de las personas al levantarse,cmo mejorar el consumo elctrico, el porqu del ruido de los radares enlos aeropuertos, el comportamiento de algunas especies animales,...

    El paradigma MapReduce

    El concepto. Partes que lo componen e implementaciones

    El nico enfoque viable para hacer frente a los grandes problemas dedatos de hoy en da es emplear la idea de divide y vencers, un concepto

    10http://www.computerweekly.com/news/2240146943/Case-Study-US-

    Xpress-deploys-hybrid-big-data-with-Informatica11

    http://tecnologia.elpais.com/tecnologia/2012/08/30/actualidad/1346316706_66

    8335.html12

    http://humanfaceofbigdata.com/

    http://www.computerweekly.com/news/2240146943/Case-Study-US-Xpress-deploys-hybrid-big-data-with-Informaticahttp://www.computerweekly.com/news/2240146943/Case-Study-US-Xpress-deploys-hybrid-big-data-with-Informaticahttp://tecnologia.elpais.com/tecnologia/2012/08/30/actualidad/1346316706_668335.htmlhttp://tecnologia.elpais.com/tecnologia/2012/08/30/actualidad/1346316706_668335.htmlhttp://humanfaceofbigdata.com/http://humanfaceofbigdata.com/http://tecnologia.elpais.com/tecnologia/2012/08/30/actualidad/1346316706_668335.htmlhttp://tecnologia.elpais.com/tecnologia/2012/08/30/actualidad/1346316706_668335.htmlhttp://www.computerweekly.com/news/2240146943/Case-Study-US-Xpress-deploys-hybrid-big-data-with-Informaticahttp://www.computerweekly.com/news/2240146943/Case-Study-US-Xpress-deploys-hybrid-big-data-with-Informatica
  • 5/28/2018 Documento Nod Up

    49/380

    49

    fundamental en la informtica desde hace mucho tiempo. La idea bsicaes dividir un problema grande en pequeas tareas. En la medida que lastareas son independientes, se pueden ejecutar en paralelo (en diferentes

    procesos y en una o mltiples mquinas). Los resultados intermedios decada tarea individual se combinan para producir la salida final deseada1314.

    Las dificultades de la programacin distribuida radican en lasincronizacin de la ejecucin de las tareas, la obtencin de los datosadecuados para cada uno de ellas y la combinacin de resultados parciales.MapReduce proporciona una abstraccin que oculta muchos de estosdetalles a nivel de sistema al programador. Por lo tanto, un desarrolladorpuede concentrarse en las tareas que se tienen que realizar, en lugar decmo se ejecutan y/o cmo se obtiene la informacin que necesitan (yasea directamente o de otras tareas).

    El paradigma MapReduce deriva de las funciones map y reduce queexisten en el lenguaje de programacin funcional LISP. En este lenguaje,la funcin map, recibe como argumentos una funcin y una serie de

    valores y luego aplica dicha funcin a cada uno de los valores de la serie;luego la funcin reduce aplica alguna operacin bsica para resumir (oreducir) los datos de la secuencia. En el modelo MapReduce queimplementa Hadoop, tenemos

    Funcin map

    Se encarga del mapeo y se aplica en paralelo para cada tem de la

    entrada de datos. Esto produce una lista de pares (clave, valor) por cadallamada. Si por ejemplo tenemos un fichero de texto como entrada, elnmero de lnea sera nuestra clave (k1) y el valor (v1) sera la lnea detexto.

    Map (k1, v1) -> lista (k2, v2)

    13http://lintool.github.com/MapReduceAlgorithms/ed1n/MapReduce-

    algorithms.pdf14

    http://youtu.be/bR2LOic_mAM

    http://lintool.github.com/MapReduceAlgorithms/ed1n/MapReduce-algorithms.pdfhttp://lintool.github.com/MapReduceAlgorithms/ed1n/MapReduce-algorithms.pdfhttp://youtu.be/bR2LOic_mAMhttp://youtu.be/bR2LOic_mAMhttp://youtu.be/bR2LOic_mAMhttp://lintool.github.com/MapReduceAlgorithms/ed1n/MapReduce-algorithms.pdfhttp://lintool.github.com/MapReduceAlgorithms/ed1n/MapReduce-algorithms.pdf
  • 5/28/2018 Documento Nod Up

    50/380

    50

    Funcin reduce

    Se aplica en paralelo para combinar todos los valores intermedios

    (v2) asociados con la misma clave (k2) para reducirlos y generar la salidacorrespondiente para cada uno de ellos (k3). El resultado global ser elconjunto de todas las salidas de los reduces.

    Reduce (k2, lista (v2)) -> lista (v3)

    Veamos un ejemplo en la Figura 1:Disponemos de un conjunto deformas geomtricas con un color determinado y queremos saber cuntas

    hay de cada una de ellas. Las formas se pueden leer fila a fila. Para cadafila, se aplica la funcin map, obteniendo cada una de las formas (clave) yel valor ser 1 (una ocurrencia de una forma) ya que lo que estamoshaciendo es contar. Posteriormente, los datos se reorganizan de formatransparente al programador, para servir de entrada a la funcin reducequese encarga de sumar el nmero de veces que aparece cada forma.

    Figura 1: Ejemplo MapReduce de cuenta de formas

  • 5/28/2018 Documento Nod Up

    51/380

    51

    Los problemas habituales en donde se emplea son la bsqueda decoincidencias de patrones, frecuencia de variables y la obtencin de

    ndices invertidos.

    Dentro de Hadoop, existen mltiples implementaciones deMapReduce en distintos lenguajes, desde la versin nativa en Java a otrasen C++ o Python. Los ejemplos descritos en este artculo utilizarn laimplementacin descrita en Python por ser la ms sencilla de comprender.Dicha implementacin se conoce con el nombre de Dumbo15. Lainstalacin del mismo no tiene ningn problema y simplemente es seguirlas indicaciones que se explican en la documentacin.

    Ejemplo Bsico: Vamos a contar palabras

    El objetivo de este ejemplo es contar el nmero de ocurrencias quehay de cada palabra en un fichero de texto. El carcter separador entrepalabras ser el espacio. El fichero se llamar wordcount.py.

    # Cuntas veces ocurre cada palabra en un fichero de texto

    def mapper(key,value):

    for word in value.split():

    yield word,1

    def reducer(key,values):

    yield key,sum(values)

    if __name__ == "__main__":

    import dumbo

    dumbo.run(mapper,reducer)

    15https://github.com/klbostee/dumbo/

    https://github.com/klbostee/dumbo/https://github.com/klbostee/dumbo/
  • 5/28/2018 Documento Nod Up

    52/380

    52

    Para ejecutarlo, simplemente ejecutaremos el comando siguiente:

    dumbo start wordcount.py -input -output

    La idea es la misma que en el ejemplo descrito previamente de lasformas. En este ejemplo, la lectura de lneas del fichero es transparente alprogramador, que se puede centrar en realizar la operacin que deseaimplementar. Vemoslo con ms detalle.

    Operacin Map

    En nuestra definicin de Map (k1, v1), v1se corresponde con cadauna de las lneas del fichero de texto que ser, mientras que k1 no nosinteresa (ser el nmero de lnea del fichero pero la implementacin deHadoop/MapReduce nos los abstrae). La salida de la operacin Map, seruna lista (k2, v2)donde k2ser cada una de las palabras de la lnea y el

    valor en este caso ser 1 ya que lo que queremos hacer es contar palabras.

    As, por ejemplo para la lnea la casa roja es la tuya tendremos laspalabras siguientes: la, casa, roja, es, la, tuya. Para cada unade ellas generaremos una salida [la, 1], [casa, 1], [roja, 1], [es, 1], [la, 1], [tuya,1].

    Operacin Reduce

    En nuestra definicin de Reduce (k2, lista (v2)), k2 se

    corresponde con cada una de las palabras a contar, mientras que lista (v2)ser una lista de 1s (las ocurrencias de la palabra). La salida de laoperacin Reduce ser cada una de las palabras con la suma de los 1s.

    As, por ejemplo tendremos distintas ejecuciones de la funcin Reducepara cada una de las palabras [la, {1,1}], [casa, {1}], [roja, {1}], [es, {1}],[tuya, {1}] y los resultados respectivamente para cada una de estasentradas sern [la, 2], [casa, 1], [roja, 1], [es, 1], [tuya, 1]

    Si imaginamos, por ejemplo, que esta operacin se puede hacer paratodos los libros de la biblioteca nacional para obtener la palabra que msaparece en el castellano en sus libros, nos encontramos ante un problemade Big Data, que con esta tcnica se puede resolver fcilmente.

  • 5/28/2018 Documento Nod Up

    53/380

    53

    Ejemplo Avanzado: Secuencia de maps y reduces

    Una empresa de paquetera, tiene organizada su informacin en tres

    tipos de ficheros:

    Ficheros de usuarios, que contienen el nombre del cliente el cdigodel pedido que tiene asociado.

    Ficheros de pedidos, donde se almacena para cdigo de pedido, suestado

    Fichero de estados de un pedido, donde se tiene el cdigo de estadoy la descripcin de dicho estado.

    La empresa de paquetera quiere tener un informe, en el que se leindique para cada usuario, su pedido y el estado del mismo en texto.

    Los datos para cada uno de los ficheros sern los siguientes:

    Delivery_users.txt

    P123,Jim

    P456,Tom

    P789,Harry

    P111,Richa

    delivery_details.txt

    P789,002

    P123,001

    P456,004

    P111,003

    delivery_statuscodes.txt

  • 5/28/2018 Documento Nod Up

    54/380

    54

    001,Delivered

    002,Pending

    003,Failed

    004,Resend

    El fichero se llamar delivery_report.py

    import sys

    import dumbo

    from dumbo import main, identityreducer, identitymapper

    from dumbo.lib import MultiMapper

    def users_parser(key, value):

    tokens = value.split(",")

    k = tokens[0]

    v = ('US', tokens[1])

    yield k, v

    def deliveries_parser(key, value):

    tokens = value.split(",")

    k = tokens[0]

    v = ('ST', tokens[1])

    yield k, v

    def status_parser(key, value):

  • 5/28/2018 Documento Nod Up

    55/380

    55

    tokens = value.split(",")

    k = tokens[0]

    v = (tokens[1],)

    yield k,v

    def reducer1(key, values):

    user = ""

    status = ""

    for v in values:

    if v[0] == 'US':

    user = v[1]

    elif v[0] == 'ST':

    status = v[1]

    # Generate the exit

    if (user != "" and status != ""):

    yield status, (user, key)

    def reducer2(key, values):

    status = ""

    info = []

    for v in values:

    if len(v)==2:

    info = v

  • 5/28/2018 Documento Nod Up

    56/380

    56

    elif len(v)==1:

    status = v[0];

    # Generate the exit

    if (status != "" and len(info)>0):

    yield info, status

    # Jobs workflow function

    def runner(job):

    # Step 1: Prepare users, details deliver

    opts = [ ("inputformat","text"), ("outputformat","text")]

    multimapper = MultiMapper();

    multimapper.add("users", users_parser)

    multimapper.add("details", deliveries_parser)

    o1 = job.additer(multimapper, reducer1, opts=opts )

    # Step 2: Get status description

    multimapper = MultiMapper();

  • 5/28/2018 Documento Nod Up

    57/380

    57

    multimapper.add("status", status_parser)

    o2 = job.additer(multimapper, identityreducer,opts=opts, input=[job.root] )

    # Step 3: Join results

    o3 = job.additer(identitymapper, reducer2, opts=opts,input=[o1, o2] )

    if __name__ == "__main__":

    from dumbo import main

    dumbo.main(runner)

    Para ejecutarlo, simplemente ejecutaremos el comando siguiente:

    dumbo start delivery_report.py -input -

    output

    En este ejemplo, se crea un trabajo compuesto por tres pasos:

    1. Se ejecuta un paso map/reduce para juntar los ficheros de usuarios yde pedidos, empleando para ello dos maps dependiendo del nombredel fichero y un nico reduce donde se juntan las salidas. lasfunciones que corresponden a este paso son users_parser,deliveries_parser y reducer1. La salida ser el cdigo del estadodel pedido y el nombre del usuario y el cdigo de pedido. Este pasosera equivalente a una funcin JOIN en una base de datos.

    2. El segundo paso, consiste en un map/reduce para organizar elfichero de cdigo de estados de pedidos y descripcin con unformato similar al primer paso. Las funciones asociadas a este pasoson el status_parser y un tipo especial de reducer conocidoidentityreducerque genera una salida por cada entrada.

  • 5/28/2018 Documento Nod Up

    58/380

    58

    3. Finalmente, se juntan ambas salidas de los pasos intermedios paraconseguir el resultado final. las funciones asociadas a este procesoson un identitymappery el reducer2.

    Ms cosas a explorar

    Como hemos visto, existe la posibilidad de construir flujos deoperaciones ms complejas donde se encadenan una serie de operacionesMapReduce16 o realizar distintos tipos de join entre varios datasets.Dumbo realiza realmente bien este tipo de operaciones. Existen mltiples

    tcnicas para ejecutar los map/reduces, pero quedan fuera del mbito deeste artculo. Lo importante es que conozcas la tcnica y hayas entendidoen qu escenarios puede ser ms til; ahora slo queda que comiences aresolver problemas con MapReduce.

    Rafael Pelln Gmez-Calcerrada (Madrid, 1974) esData Scientist en Telefnica I+D. Durante su vidaprofesional ha trabajado en proyectos web enmltiples tecnologas (ASP, JSP, Java, Flex) y BI; desdesoluciones tradicionales (informes, cuadros demando,) hasta soluciones novedosas relacionadascon Big Data (Hadoop, Hive, MapReduce,),especialmente en temas de visualizacin de datos.

    16http://dumbotics.com/

    http://dumbotics.com/http://dumbotics.com/
  • 5/28/2018 Documento Nod Up

    59/380

    de apple pie a jelly bean:

    la dulce historia de Androidpor Jess Gumiel Ramrez

  • 5/28/2018 Documento Nod Up

    60/380

    60

  • 5/28/2018 Documento Nod Up

    61/380

    61

    Introduccin

    Este artculo tiene como principal objetivo hacer un repaso de lahistoria de Android, desde su concepcin hasta el da de hoy (Noviembre2012). La intencin del mismo es dotar al lector del contexto suficientepara entender la evolucin del sistema operativo, y las razones que lo hanllevado a ser lo que es.

    Qu es Android?

    A da de hoy es difcil encontrar alguien que no sepa que Android esun sistema operativo basado en Linux y diseado para correrprincipalmente en dispositivos mviles, tales con smartphoneso tablets, peroquizs no es tan conocido, que el desarrollo de Android es realizado porGoogle, en colaboracin con la OHA(Open Handset Alliance).

    La OHA es una alianza comercial de 84 empresas de todos losmbitos (proveedores de telefona, fabricantes de chips, fabricantes determinales, desarrolladores, etc.), que se dedica a desarrollar estndaresabiertos para dispositivos mviles.

    Cmo comenz todo: Andy Rubin, el pap de Android

    No se puede hablar de los comienzos de Android sin mentar alhombre que le dio la vida, Andy Rubin. Un licenciado en Ciencias de

    Computacin por la Universidad Utica de Nueva York, que curiosamenteempez a trabajar como ingeniero de Apple.

    Tras Apple, vino General Magic, donde particip en el desarrollo deMagic Cup, que pretenda ser un sistema operativo para telfonos. De ahpas a Artemis Research (comprada posteriormente por Microsoft) antesde fundar Danger Inc, la empresa que desarroll el Hiptop, un telfonoque marcara las pautas de los actuales smartphones.

    As que tenemos que entre 1989 y 2003 Andy pas por Apple,Microsoft, fund su propia empresa y particip en proyectos de desarrollo

  • 5/28/2018 Documento Nod Up

    62/380

    62

    tanto hardware como software relacionados con telefona mvil. Quesera lo siguiente? Pues fundar Android Inc en 2003.

    En agosto del 2005 Android fue comprada por Google, donde Rubinostenta actualmente el puesto de Vicepresidente de Ingenierasupervisando el desarrollo de Android.

    El porqu del nombrado de versiones

    A nadie se le escapa el tirn comercial de los nombres de las

    versiones de Android, y todo el juego que da en cuanto a marketing, peropocos saben qu llev a los chicos de Google a seguir esta nomenclatura.

    Empecemos por el principio, el comienzo del desarrollo, all cuandolas primeras versiones se identificaban por una M de Milestone, seguidadel nmero de hito. El siguiente paso fue aadirle una wb de WeeklyBuild, debido a que las compilaciones por aquel entonces eran semanales, ypara rematar tc de TestCycle, con lo que acababas teniendo algo como

    M3-WB22-TC3. Sencillo de recordar, no?

    Los desarrolladores vieron que era inviable usar esta nomenclatura, ybuscaron un criterio divertido y sencillo de recordar. Se decidi que elorden de nombrado fuera alfabtico, y tras un primer intento de usarnombres de robots famosos - de ah que las primeras versiones fueranconocidas como Astro Boy y Bender - se opt por los pastelitos. Larazn? El gusto por los Petit Fourdel manager de producto, que decididar este nombre interno a la versin 1.1. A partir de las siguientes

    versiones y una vez decidido seguir la temtica de los dulces, seestandariz el orden alfabtico para continuar con CupCake, Donutyas hasta la actual Jelly Bean. Posteriormente se ha conocido la versin 1.0como Apple Pie, aunque segn explica Google oficialmente, tanto las

    versiones 1.0 como 1.1 no tenan codename; el inicio de la dulce saga fue la1.5.

    En el siguiente listado aparecen las versiones liberadas a da de hoy(noviembre 2012):

  • 5/28/2018 Documento Nod Up

    63/380

    63

    Versiones preliminares, entre ellas las nombradas Astroboy yBender.

    1.0Sin nombre oficial, nombrada a posteriori como Apple Pie. 1.1Sin nombre oficial, internamente se la llam Petit Four. 1.5Cupcake. 1.6Donut. 2.0/2.1clair. 2.2Froyo. 2.3Gingerbread. 3.0Honeycomb. 4.0Ice Cream Sandwich. 4.1/4.2Jelly Bean.La evolucin de Android

    Desde la primera versin de Android hasta el da de hoy, el procesode evolucin y aparicin de nuevas versiones ha sido continuo e

    increblemente rpido: 11 versiones en 5 aos nos dan una idea de laseriedad con que se toman los californianos de Google la evolucin de susistema operativo mvil.

    La primera versin en salir a la luz, la 1.0, la pudimos ver en el primermvil Android, el HTC Dream, all por Octubre del 2008. Poco ms deun ao despus de que su gran competidor Apple presentara el iPhone.

    Ah empezara la lucha de poder entre estos dos gigantes, lucha que ha

    vivido su ltimo hito en Octubre del 2012 con la presentacin de laversin 4.2de Android, anunciada como un nuevo sabor paraJelly Beany preinstalada en su flamante Nexus 4.

    En la tabla siguiente se esquematiza la evolucin de Android,mostrando sus versiones, fecha de lanzamiento, versin de la API queimplementan y la cuota de distribucin que tienen a fecha de Noviembre2012. Hay que tener en cuenta que estos porcentajes corresponden conalrededor de 400 millones de dispositivos Android activados.

  • 5/28/2018 Documento Nod Up

    64/380

    64

    Tabla 1. Distribucin versiones de Android17

    Android y la fragmentacin

    Una vez repasados los orgenes de Android y su evolucin, tenemossuficiente datos para analizar la principal problemtica con la que sus

    desarrolladores se encuentran a da de hoy, la fragmentacin.

    11 versiones en 5 aos, 400 millones de dispositivos activados,cientos de diferentes modelos de terminales con Android instalado, y msde 300 socios en diversos mbitos: hardware, software, proveedores detelefona,

    Este crecimiento vertiginoso sufri una aceleracin exponencial

    durante el ao 2011, justo el ao en que los chicos de Google empezarona darse cuenta de la imperiosa necesidad de imponer unas guas de estilo

    17http://developer.android.com/about/dashboards/index.html

    Versin Nombre Liberada API Cuota

    1.5 Cupcake Abril 2009 3 0.1%

    1.6 Donut Septiembre 2009 4 0.3%

    2.1 Eclair Enero 2010 7 3.1%

    2.2 Froyo Mayo 2010 8 12.0%

    2.32.3.2 Gingerbread Diciembre 2010 9 0.3%

    2.3.3- 2.3.7 10 53.9%

    3.1 Honeycomb Febrero 2011 12 0.4%3.2 13 1.4%

    4.0.X Ice CreamSandwich

    Octubre 2011 15 25.8%

    4.1 Jelly Bean Junio 2012 16 2.7%

    4.2 Octubre 2012 17 Sin datos

    http://developer.android.com/about/dashboards/index.htmlhttp://developer.android.com/about/dashboards/index.html
  • 5/28/2018 Documento Nod Up

    65/380

    65

    sobre las aplicaciones que corrieran sobre sus sistemas operativos, y deproporcionar compatibilidad con las versiones ms antiguas de su API. Yes que, qu desarrollador iba a lanzar su producto utilizando el SDK 15, si

    no iba a poder ser usado por casi el 75% de los usuarios.

    El perfil de los usuarios de Android es otro de los factores que hanfacilitado sobremanera la existencia de tantos terminales ejecutndose con

    versiones de Android de hace ms de dos aos. A diferencia de losusuarios de iPhone, que estn siempre al da de actualizaciones, y corren ala tienda en cuanto sale una nueva actualizacin, el usuario de Androidentiende el mvil como una herramienta, y mientras cubra sus necesidadesno lo va a cambiar. Tampoco son muy dados a estar al da de lasnovedades en cuanto a aplicaciones, ni a descargarlas compulsivamente.En datos, slo el 13% de los usuarios tiene ms de 50 aplicacionesinstaladas, y menos de un 3% tienen aplicaciones de pago.

    La importancia de Honeycomb

    Estamos hablando de la fragmentacin de Android, de cmointentan estandarizar sus desarrollos, y de pronto aparece un puntodedicado a Honeycomb; parece un tema fuera de contexto, pero nada mslejos de la realidad.

    Cmo comentamos en el apartado dedicado a la evolucin deAndroid, en 2011 Google se sumergi en el mercado de las tabletas yliber Honeycomb, una versin especfica para estos dispositivos, peroque sin embargo supuso un punto de inflexin en la evolucin de

    Android.

    Con Honeycomb aparecieron los Fragments, orientados a apoyardiseos de interfaz de usuario ms dinmicos y flexibles en las pantallas degran tamao, pero tremendamente tiles, adems, a la hora de reutilizarcomponentes entre actividades y liberar de cdigo a estas.

    Otra de las grandes novedades de la versin fue la ActionBar,implementada con un claro objetivo: intentar estandarizar la apariencia delas aplicaciones desarrolladas para Android. De esta manera la ActionBar

  • 5/28/2018 Documento Nod Up

    66/380

    66

    se convierte en el lugar desde el cual se maneja la navegacin de laaplicacin, dejando claro en cada momento, donde ests, de dnde vienes,y qu puedes hacer en la pantalla en la que te encuentras.

    Y ahora que tienes Fragments, y tienes ActionBar, por destacar lasdos principales novedades introducidas por HoneyComb, cmo le dices alos desarrolladores que no pueden usarlas en dispositivos con una APIinferior a la 11. Simplemente no puedes, y ah radica la importancia de esta

    versin.

    ICS, Estandarizando el diseo

    Tras Honeycomb lleg ICS, que se podra considerar casi una mezclaentre Gingerbread y ste, ya que su principal caracterstica es aunar elmundo tableta con el mundo mvil.

    Google empez a darle una importancia mxima al diseo, y a crearuna imagen fcilmente reconocible en sus aplicaciones; el objetivo es que

    cualquiera que viera una aplicacin para Android supiera a que sistemaoperativo perteneca.

    En enero del 2012 Google lanza unas guas de estilo para eldesarrollo de Apps sobre ICS, algo muy en la lnea de Apple. Es algo quedesde hace tiempo reclamaban tanto los usuarios como losdesarrolladores, y durante este ao se convirti en una obsesin.

    Unos meses ms tarde lavan la cara de la web de Android developerspara seguir el estilo ICS, una decisin controvertida inicialmente, pero queal final ha resultado ser acertada, y que ha dotado al mundo Android deuna lnea clara de diseo en todos sus frentes.

    Soluciones contra la Fragmentacin

    En este apartado se hablar de las medidas que desde el ao 2011est tomando Google para acabar con el problema de la fragmentacin.En los siguientes puntos veremos cmo las soluciones pasanprincipalmente por los desarrolladores, y por intentar que estos sean los

  • 5/28/2018 Documento Nod Up

    67/380

    67

    encargados de hacer aplicaciones compatibles con el mayor nmero decantidad de dispositivos posibles, manteniendo una apariencia y unanavegabilidad uniforme en todas ellas.

    Aunque no podemos olvidar decisiones comerciales como podranser el lanzamiento del Nexus 4 libre y a un precio bajsimo, sin duda unabuena manera de convencer a los usuarios con un mvil antiguo (digamoscon una versin de Android 2.3), que ya es hora de cambiar de terminal.Ser interesante ver la evolucin de la tabla 1 en los prximos meses.

    Android Support Library

    En marzo del 2011 se liber la primera versin de la librera decompatibilidad android-support. El objetivo de esta librera esproporcionar a los desarrolladores una serie de bibliotecas estticas deapoyo, de manera que puedan seguir desarrollando sus aplicaciones parauna determinada versin de la API, o con compatibilidad para sta, peroutilizando caractersticas de una versin de la API de Android superior.

    Por ejemplo gracias a la librera de soporte, es posible implementaruna aplicacin ejecutable en un dispositivo con Froyo instalado (API 8),pero que haga uso de Fragments, incorporados en la versin 11 de la APIde Android.

    La primera versin de la librera de soporte, llamada android-support-v4, debe su sufijo v4, a que ofrece compatibilidad desde la API 4

    haca arriba. A da de hoy van 11 revisiones de la librera, que cada par demeses ms o menos va siendo incrementada con nuevas funcionalidades.

    A partir de la revisin 3 del paquete, se incluye la biblioteca android-support-v13, que ofrece compatibilidad para versiones con un nivel 13 osuperior de la API. Esta librera es un superconjunto de la v4, e incluyeclases adicionales para trabajar con las API v13.

    Hay que tener cuidado qu versin de la librera utilizar, porque sibien podras utilizar la v13 para todo, ya que contiene a la v4, si se utiliza

  • 5/28/2018 Documento Nod Up

    68/380

    68

    alguna de las clases que requieren a la API 13, la aplicacin dejar de sercompatible con mviles corriendo versiones inferiores de Android.

    Otras libreras de soporte no oficiales. Compatibilizando laActionBar

    Con la aparicin de HoneyComb tambin surgieron varias librerasno oficiales para ofrecer soporte a los nuevos diseos introducidos en la

    versin para tabletas. Dichas libreras se centraron sobre todo en ofrecercompatibilidad con la ActionBar, un elemento que haba sido olvidadopor la librera de soporte de Android. Probablemente el olvido no sea tal,sino que vieron inviable ofrecer desde la librera el soporte grfico que la

    ActionBar requiere.

    As a principios de 2011 surgieron algunos proyectos que hanacabado siendo imprescindibles para el desarrollo de cualquier aplicacinque pretenda implementar la ActionBar en dispositivos con una versinde Android inferior a la 11.

    De todos los proyectos de este tipo, el ms utilizado sin duda ha sidoActionbarsherlock18, una extensin de la biblioteca de soporte diseadopara facilitar el uso del patrn de diseo ActionBar a travs de todas las

    versiones de Android con una nica API. La biblioteca utilizaautomticamente la barra nativa cuando es posible (API >=11) o utiliza laimplementacin de sherlock en caso contrario.

    Android y el diseo

    Cmo hemos comentado al hablar de ICS, en Enero del 2012Google lanz unas guas de estilo para Android, y comenz su lucha porintentar que todos los desarrolladores las siguieran. Parte de esa estrategiade plantear una lnea comn fue el rediseo del portal de desarrolladoresde Android, lugar de referencia dnde se puede encontrar toda la

    informacin que Google proporciona sobre Android.

    18http://actionbarsherlock.com/

    http://actionbarsherlock.com/http://actionbarsherlock.com/
  • 5/28/2018 Documento Nod Up

    69/380

    69

    De esta manera Google intenta responder a la principal reclamacinque histricamente ha tenido Android, y es que sus diseos no seguanuna lnea comn, que cada desarrollador haca las cosas de una manera, y

    que en muchas ocasiones el resultado final era bastante poco atractivo, ydaba sensacin de dejadez grfica.

    Ahora se anima al desarrollador a cuidar estos aspectos con frasescomo: Tu aplicacin debe esforzarse por combinar la belleza, la sencillezy la intencin de crear una experiencia mgica, sin esfuerzo y poderosa.

    La muestra definitiva de cmo Google ha puesto el foco en el diseose ha visto en el Google I/0 del 2012, dnde gran cantidad de lasponencias y los talleres estaban dedicados a este aspecto.

    En resumen, la web sobre patrones en Android19 debera ser lacabecera de todos aquellos que trabajamos con Android. Si todosseguimos sus consejos, quizs en el prximo libro sobre Android que leas,la fragmentacin sea descrita como un problema del pasado.

    Jess Gumiel (Badajoz, 1982) es Ingeniero I+D enTelefnica I+D. Comenz su carrera profesionaldesarrollando backend para provisin de servicios, ypoco a poco fue evolucionando hasta el mundo deldesarrollo mvil, aunque sin olvidar los servicios decomunicacin y la VoIP. Fan del mundo emprendedor,en el cual se ha introducido con el proyectoFootballtracker20.

    19http://developer.android.com/intl/es/design/patterns/index.html20

    http://www.football-tracker.com

    http://developer.android.com/intl/es/design/patterns/index.htmlhttp://www.football-tracker.com/http://www.football-tracker.com/http://developer.android.com/intl/es/design/patterns/index.html
  • 5/28/2018 Documento Nod Up

    70/380

  • 5/28/2018 Documento Nod Up

    71/380

    la comunicacin, ese gran desconocido

    por Alberto de Vega Luna

  • 5/28/2018 Documento Nod Up

    72/380

    72

  • 5/28/2018 Documento Nod Up

    73/380

    73

    Y esto, qu tiene que ver con el desarrollo?

    Hay muchas cosas que pueden impactar en que un proyecto dedesarrollo software llegue o no a buen puerto: la tecnologa utilizada, laexperiencia del equipo, la coordinacin del mismo, el trato con elcliente, Y casi todos estos factores tienen en comn una nica cosa: lacomunicacin.

    Por tanto, como desarrolladores o arquitectos o coordinadores deequipos (o cualquier otro rol que se te ocurra), tenemos que asegurarnos

    de que todo el mundo sepa lo importante que es la comunicacin. Todo elmundo tiene que saber la tecnologa que se usa, en qu tiene experienciacada miembro del equipo, qu se espera de cada uno, qu tareas quedanpor hacer, las expectativas del cliente, Comunicacin, comunicacin,comunicacin!

    Qu no es la comunicacin

    Cuando nos damos cuenta de que algo no ha ido bien debido a unproblema de esta ndole, la solucin parece clara y siempre hay alguien quedice Necesitamos ms comunicacin. Y la siguiente mente brillante diceeso de Podemos hacer reuniones de seguimiento peridicas. En smisma, esta idea no es mala, pero debemos tener cuidado con no morirpor reunionitis. Por tanto, son las reuniones una manera de mejorar lacomunicacin?

    S, pero siempre que tengamos en cuenta las siguientes condiciones:

    Aprovechando las herramientas de calendario existentes hoy en da,es bueno enviar la convocatoria con antelacin para que a todo elmundo le aparezca en la agenda y la acepte o la rechace. Tambin esbueno indicar si la asistencia es obligatoria u opcional a cadaparticipante. Una convocatoria enviada as recibe ms atencin queun correo electrnico diciendo algo como Nos vemos a las 7 para

    ver el tema de. Hay que empezar a la hora acordada, pero tambin terminar en el

    momento que se haba programado. El tiempo es una de las cosas

  • 5/28/2018 Documento Nod Up

    74/380

    74

    ms valiosas que hay, as que no se lo hagas perder al resto mientraste esperan ni les hagas llegar tarde a las siguientes reuniones.

    Las reuniones tienen que tener un objetivo y todos los asistentestienen que saber cul es el objetivo concreto de esa reunin. El que laha convocado tendr tambin que presentar dicho objetivo nada msempezar.

    Las reuniones deberan tener una agenda que se haya enviado conantelacin para que la gente pueda prepararse los contenidos adebatir. Si sale algn tema que tenga ramificaciones fuera del mbitode esta reunin, es mejor convocar otra reunin separada para ello

    (con los asistentes adecuados, como comento en el siguiente punto). El organizador de la reunin solo debera invitar a aquellas personas

    que es imprescindible que vayan. A veces es posible que una personatenga que estar solo en un momento determinado para explicar oaclarar una cosa: pues bien, para eso tenemos una agenda. As esapersona puede saber a qu hora tiene que entrar y salir de la reunin.Otra posibilidad es que le llamemos por telfono para hacer esaaclaracin y luego le dejemos seguir con sus tareas habituales;

    obviamente, hay que avisarle con suficiente antelacin para que tengapreparado lo que tiene que contar y pueda planificarse tambin suagenda de ese da teniendo en cuenta esa reunin.

    Tras la reunin, tiene que haber unas conclusiones y unos puntos deaccin y que est claro quin tiene que llevar a cabo esos puntos deaccin y las fechas esperadas para su cumplimiento o revisin. Porsupuesto, es importante que esto quede escrito en algn sitio parafuturas consultas. Lo que me lleva a hablar de

    Herramientas: cuando tenemos un martillo todo

    nos parecen clavos

    No por tener la herramienta ms impresionante del mercado en losservidores de la compaa vas a conseguir una mejor comunicacin. Y si

    no, fjate en tu entorno: sistemas de control de versiones, wikis, carpetascompartidas, herramientas colaborativas, foros, microblogging, Estamosdesbordados de herramientas y pese a todas esas posibilidades, en muchos

  • 5/28/2018 Documento Nod Up

    75/380

    75

    proyectos sigue pasando eso de Pero eso, cundo lo habis decidido? Am no me lo habis dicho.

    Est claro que una herramienta es solo un medio de comunicacin ydebemos usar la ms adecuada en cada caso. Lo ideal sera tener unaherramienta comn con una vista para los gestores (con el seguimiento detareas, lo que falta por hacer, las prioridades, etc.) y otra vista para losdesarrolladores (con el cdigo fuente, los parches, las revisiones decdigo, etc.) que estuvieran relacionadas (cuando subas un trozo decdigo, que el bug corregido se refleje en el seguimiento de tareas) quetuviera tambin un repositorio de documentacin asociada a las tareas.Pero mientras buscamos esa herramienta, no podemos dejar abandonadaesta parte, as que aqu van una serie de consejos basados en la experienciapara seleccionar el medio de comunicacin a emplear en cada ocasin.

    El cdigo fuente debe estar en un repositorio compartido con sucontrol de versiones correspondiente, eso es obvio. Pero noadelantemos acontecimientos, porque vamos a dedicarle su propio

    apartado a este punto. Lo que nos ha servido para hacer ese cdigo fuente (diagramas de

    arquitectura, flujos, especificaciones de requisitos, validaciones porparte de cliente, actas de reuniones, etc.) tiene que estar en unrepositorio de documentacin. Este trmino tan genrico puedesignificar una wiki, una carpeta compartida o una herramienta tipo

    Alfresco o Sharepoint. El caso es que cuando tengamos dudas,podemos ir ah a consultarlas o al menos, ver qu persona ha hechoun documento en concreto y hacerle cualquier pregunta quetengamos. Lo que no es eficiente es compartir esta informacinnicamente por mail y luego estar rebuscando en nuestro cliente decorreo la informacin cuando ni siquiera recordamos el asunto delcorreo o quin lo envi.

    El correo es una mala herramienta para el debate. En cuanto unasunto provoque tres correos seguidos, hay que usar el telfono o

    hacer una reunin con los implicados. Si no, corremos el riesgo deprovocar una oleada de SPAM que rete t de las botnetde las mafiasrusas. El resultado de la reunin s podemos mandarlo por email. O

  • 5/28/2018 Documento Nod Up

    76/380

    76

    mejor an, debemos meterlo en el repositorio de documentacin ymandar un mail para decir dnde est disponible.

    El correo tambin es una mala herramienta para hacer un documentoentre varios. Olvida eso de mandar adjunto el documento (o la hojade clculo o la presentacin) para que cada uno aplique los cambios yte los mande. Eso produce ms caos que un imn en un disco duro.Seguro que te suenan frases como Perdona, te mando otra vez elfichero que faltaban por integrar los cambios de Juan. Eh! Heaadido dos filas ms en verde para que las integres con la ltima

    versin. Y, cul ser la ltima versin? Para estos casos, tener unaaudio conferencia mientras el dueo del documento lo compartemediante join.me (por ejemplo, tambin se puede usar Skype, Lync o

    Webex) permite que todo el mundo vea a la vez los cambios de losdems y pueda haber debates. Y otra posibilidad es alojar eldocumento (si no es confidencial, porque incluso con las opciones deprivacidad hay riesgos) en Google Docs para que todo el mundopueda ir aadiendo a la vez las modificaciones y ver las de los dems.Incluso puedes combinar ambas opciones, usando Google Docs para

    una primera ronda de contribuciones y luego hacer el remate final enesa audio conferencia.

    El correo es bueno cuando no podemos tener una comunicacinsncrona con nuestro interlocutor (o interlocutores) y necesitamospedir algo. Y, cmo deberamos estructurar un correo? Puesdeberamos explicar el contexto, el problema que tenemos, lasolucin que proponemos (si la tenemos) y lo que estamos pidiendo(puede ser la propia solucin, una autorizacin, un dato, una reunin,etc.). Y el correo si breve, dos veces bueno. Siempre puedes ponerun enlace al repositorio documental o a una wiki donde des mscontexto o incluir un adjunto o cosas as.

    Los chats (como Skype o Lync) tambin son tiles para resolverdudas rpidas en el momento. Si la cosa se complica (malentendidosen el texto, conversacin con varios interlocutores simultneos), usala voz. Y respeta a las personas que tienen su Estado como Ocupado

    o No disponible. Mejor an,