Tutorial
www.sg.com.mx |
Software Guru
Sinatra
MĂŠxico, $65.00
www.sg.com.mx |
Software Guru
36
CONOCIMIENTO EN PRÁCTICA
.CONTENIDO Mayo-Julio 2012 |
www.sg.com.mx
En Portada Juegos casuales
18
El mundo del desarrollo de videojuegos abre sus puertas a un segmento grande de consumidores que sin cumplir el rol de “gamer” tradicional se ven atraídos hacia los juegos casuales. Lo anterior hace a esta industria más dinámica, en la que no solamente se crean buenas oportunidades de negocio sino que también amplia los retos de los programadores para lograr desarrollos prácticos, creativos y mágicos.
Columnas Tejiendo Nuestra Red
08
Por Hanna Oktaba
Mejora Continua
10
Por Luis Cuellar
Tendencias en Software
13
Por Luis Daniel Soto
Código Innovare
40
Por Karen Mariel Nájera Hernández
Columna invitada Pág.
18
Programar es un Estilo de Vida Por Gunnar Wolf
02
48
Por Manuel López Michelone
50
.CONTENIDO
Herramientas y Novedades
Pág.
16
Lo que Viene
12
Tutorial CRUD con Sinatra
14
Por Salomón Rincón
Fundamentos Recomendaciones para Construcción de Sitios Web
52
Por César González Mendoza
En Cada Número
Emprendiendo
Editorial
04
Por Luis López
Noticias
05
Prácticas
Gadgets
54
Biblioteca
56
Procesos Entrega Ágil Disciplinada
16
28
Por Scott W. Ambler y Mark Lines
Usabilidad Concretando la Interfaz
32
Por Pamela Rodríguez
Prueba de Software Los Retos de un Tester de Videojuegos
34
Por Berenice Ruíz Eguino
Arquitectura Arquitectura de Software y CMMI
36
Por Humberto Cervantes
Ágil Un Acercamiento al Pensamiento en Sistema
38
Por Elizabeth Rivera
Programación Visualización de Programas Utilizando Técnicas Orientadas a Aspectos
42
Por Juan Alberto Hernández Martínez y Ulises Juárez Martínez
Gestión Cómo me organicé durante el desarrollo de PostWarden Por Gabriel Ayuso
03
46
Software Guru
www.sg.com.mx |
Logra Pitches Épico
.EDITORIAL Bienvenida
. “¡Las formas de ocio también requieren sofisticación!”
La vida es un juego
N
uestra sociedad se “virtualiza” cada vez más y conforme avanza la tecnología, aumenta la demanda de los medios para compartir en Internet aquello que descubrimos o aprendemos, así como también compartir momentos en línea para la vida profesional y de igual forma para el entretenimiento. ¡Las formas de ocio también requieren sofisticación! Y qué mejor sofisticación para esos momentos de ocio que los Juegos Casuales. Aquí es donde entran en acción los desarrolladores de Juegos Casuales quienes se encargan de hacer líneas de código llenas de persuasión para generar el interés que lleve al usuario a engancharse al juego y en el mejor de los casos a generar a través de él ingresos. Así que dedicamos la sección Principal de ésta edición a todos aquellos que son o quieren ser parte del mundo del Desarrollo de Juegos Casuales y enfrentarse a retos que integran la creatividad y talento de diseñadores de videojuegos, programadores, artistas y productores para realizar aplicaciones innovadoras para el mundo virtual. Además encontrarás las columnas y artículos que, como siempre, tienen el objetivo de ampliar las perspectivas para que alcancemos como comunidad de Profesionistas de T.I. un entendimiento compartido del “fenómeno” tan genial y desafiante que es el mundo del software. Queremos agradecer tu participación en la edición abril 2012 de SG Virtual Conference, evento que fué todo un éxito gracias a tu apoyo, logrando una asistencia de más de 5mil personas, y 75 sedes virtuales en la República Mexicana y diferentes países de habla hispana. Estamos planeando una siguiente edición para finales del 2012, espera noticias. Recuerda que este mes de junio se llevará acabo el congreso SG Conference + Expo 2012, donde esperamos contar con tu presencia. Tendremos prestigiados ponentes internacionales como Chris Richardson y Scott Ambler, así como variados eventos y oportunidades para aprender, compartir y conectar con otros colegas. Nos vemos en SG C+E.
››Equipo Editorial SOFTWARE GURU
DIRECTORIO SG Dirección Editorial Pedro Galván / Dirección de Operaciones Mara Ruvalcaba Coordinación Editorial Vanessa Amaya / Arte y Diseño Oscar Sámano / Suscripciones María Morales Consejo Editorial Jorge Valdés - PMI / Luis Cuéllar - Softtek / Luis D. Soto - Microsoft / Hanna Oktaba - UNAM / Emilio Osorio - Sistemas Humanos / Luis Vinicio León - e-Quallity / Gloria Quintanilla
Colaboradores
Berenice Ruiz, César González, Daniel Ramos, David Bonilla, Elizabeth Rivera, Gabriel Ayuso, Gunnar Wolf, Hector Cuesta, Humberto Cervantes, Jorge Esteban Zaragoza, José Eduardo Terán, Juan Alberto Hernández, Luis López, Manuel López, Masa K Maeda, Milko Madariaga, Pamela Rodríguez, Salomón Rincón
Ventas Claudia Perea / Alianzas Montserrat Ramírez / Webmaster Karen Rodríguez / Luis Sánchez / SGCampus Ana Karen Rosales / Administración-SG Guía Denise Aguilar Contacto info@sg.com.mx SG Software Guru es una publicación trimestral editada por Brainworx, S.A. de C.V., Temístocles 34 piso 3, México DF 11560. Los contenidos de esta publicación son propiedad intelectual de los autores y están licenciados bajo Creative Commons Atribución-No comercial 2.5 México. Todos los artículos son responsabilidad de sus propios autores y no necesariamente reflejan el punto de vista de la editorial. Reserva de Derechos al Uso Exclusivo: En trámite. ISSN: 1870-0888. Registro Postal: PP15-5106. Distribuido por Sepomex. Se imprimió en mayo de 2012 en 4Press.
04
.NOTICIAS
Imagen cortesía de @L1452
.Startup Weekend DF
.IX Encuentro Genexus México
Durante el evento, el más importante de GeneXus en México, realizado el pasado 15 de marzo, se lanzó la versión final del nuevo GeneXus X Evolution 2. Esta plataforma de desarrollo integra el generador de aplicaciones nativas para las plataformas Google Android, Blackberry OS e IOS (iPad, iPhone, iPod Touch), un nuevo generador HTML 5, la máxima seguridad para los sistemas desarrollados, y una completa integración con la nube.
MozCamp LATAM 2012
El pasado 20 de abril se celebró en Buenos Aires, Argentina el MozCamp LATAM, evento donde la comunidad iberoamericana que colabora en la fundación Mozilla estuvo presente. “El Mozcamp fue algo especial, el poder conocer a fondo los diferentes proyectos de Mozilla y entender la forma en que la fundación trabaja, me permitió entender Fotografía de Ariel Kanterewicz mejor proyectos como BrowserID, y conocer el evento Kilimanjaro, iniciativa para que todos los esfuerzos de mozilla (Firefox, Marketplace, Persona y B2G) se integren en una sola experiencia”, nos comenta Luis Sánchez (@lasr21), miembro de la comunidad Mozilla México.
.IBM Industry and Trend Forum 2012
El pasado mes de marzo se llevó acabo en la Ciudad de México, la edición 2012 del IBM Industry and Trend Forum, con el objetivo de mostrar, enlazar y ofrecer un espacio innovador para las TI y el conocimiento, con lo último en tendencias del mercado orientadas a negocios de todo tipo. Durante el Forum, tuvimos la oportunidad de charlar con Alex Kramer, Socio IBM Global Business Services, quien destacó el concepto Agile como el que define no sólo la filosofía de IBM, sino que además da la pauta para lo que nos depara el futuro en unos cuantos años.
.Super Happy Dev House Mexico City
¡We Are Back, We Are Open Edition!, fue el tema elegido para esta edición número 24 del SHDHMC que tuvo lugar el pasado 28 de Abril. En esta ocasión reunió a desarrolladores, diseñadores, electrónicos y artistas. Recordemos que el SHDH es un evento cuyo objetivo es que durante 12 horas los asistentes programen, diseñen, solden, dibujen , etc. es decir hackear en su mas pura expresión. Si estas interesado en asistir al próximo dev house, ingresa a: http://shdhmexicocity.org.
Para mayor información, noticias al día y actualizaciones de la industria visita: www.sg.com.mx
05
Software Guru
Con la colaboracion de Dotlìpen, CITI Tabasco y BlackBerry, se llevó a cabo el pasado 26 de abril el show de aplicaciones móviles que inicia la gira 2012 de Appcircus en Latinoamérica; se registraron 22 aplicaciones en el sitio web, de las cuales 10 estuvieron en vivo en el evento, sobrepasando las expectativas de los espectadores y el jurado que presenciaron las presentaciones de las aplicaciones y el trabajo de programadores locales, y de otras zonas como Merida, Chiapas y el Distrito Federal.
www.sg.com.mx |
.AppCircus Villahermosa
Emprendedores e inversionistas se dieron cita en la Ciudad de México para asesorar y conocer las propuestas de 12 equipos mexicanos que compitieron durante en la 3ra edición de Startup Weekend DF. La visita fue parte de la gira por Latinoamérica de la iniciativa Geeks on a Plane que organiza 500 Startups. El jurado contó con personalidades como: Dave McClure de 500 Startups, Allen Taylor de Endeavor Global, David Weekly de Mexican.VC y Hernán Fernández de Angel Ventures México. El equipo ganador de esta ocasión fue Encarguitos (http://encarguitos.herokuapp.com). Más información sobre próximas ediciones en: http://startupweekenddf.com
.REPORTAJE
SXSW Interactive 2012
latinoamérica se hace presente
E
l festival South by Southwest® (SXSW) es un evento que ofrece la convergencia única entre creadores y emprendedores de cine, música y tecnología. Esta extraña combinación de temas genera el espacio perfecto para aprender, descubrir ideas y generar sinergias y por lo tanto se ha convertido en la plataforma ideal para el lanzamiento de apps y startups. SXSW se realiza anualmente en la ciudad de Austin, Texas la cual provee el escenario perfecto para hacer networking global en medio de una relajada atmósfera. La edición 2012 del SXSW se llevó a cabo del 9 al 18 de marzo y SG estuvo ahí para cubrir los detalles. Específicamente estuvimos en el SXSW Interactive, que son los contenidos y actividades relacionados con startups y tecnologías emergentes. 06
En el último par de años, nos hemos dado cuenta que el énfasis de muchos contenidos y actividades de SXSW es hacia dar a conocer y conectar con lo que está sucediendo en los ecosistemas de emprendimiento tecnológico en distintas partes del mundo. En 2011 hubo varias contenidos dedicados a América Latina, y en este 2012 notamos que esto se amplió para incluir varias conferencias y páneles con emprendedores tecnológicos de Asia y Africa. Es muy interesante ser testigo de cómo América Latina está lentamente, pero a paso firme, insertándose en el escenario global de startups basados en tecnología. Y aunque las principales noticias del SXSW Interactive tal vez no hayan sido sobre nuestra región, es un hecho que sí tuvimos una participación significativa en todo tipo de actividades.
“América Latina está lentamente, pero a paso firme, insertándose en el escenario global de startups.”
Startup Bus
Startup Bus es una competencia en la que jóvenes emprendedores de todo el mundo se van juntos en camión hacia el SXSW y durante el recorrido crean startups. Digamos que es como un Startup Weekend sobre ruedas. Lo interesante es que cuando llegan a Austin, los finalistas de cada camión compiten entre sí ante un panel de jurados formados por personajes importantes de firmas de aceleración e inversión en startups. La primera noticia importante al respecto es que este año se abrió votación para recibir emprendedores fuera de Estados Unidos, y México aplastó en la votación (confesamos que SG tuvo que ver ahí difundiendo la votación), por lo que tuvimos Startup Bus México. La siguiente noticia importante es que un equipo de México llegó a la gran final con los mejores 8 equipos de todo el mundo. Fue el equipo Spott, quienes crearon una app móvil con la que compartes archivos en base a geolocalización. Aunque no se llevaron el
primer lugar, fueron uno de los contendientes más fuertes, dejando una gran impresión en el jurado, organizadores y colegas.
Lanzamientos
Algunos startups de Latinoamérica lanzaron o activaron aplicaciones móviles durante el SXSW. Uno de estos fué “Taco’s taco”, una red social de geolocalización usada para encontrar los mejores tacos en los alrededores. También conocimos Lifedots, un startup basado en Nueva York por fundadores mexicanos, y cuya tecnología es desarrollada en México. Muchos otras personas y startups, aunque no hicieron lanzamientos formales o estuvieron en la expo, y si aprovecharon el evento y networking para estar promoviendo y pitchando ante clientes e inversionistas potenciales, casos como estos fueron PikHub y Nuflick.
Networking
En las fiestas y meetups América Latina también tuvo lo suyo. Posiblemente el más simbólico fue el meetup “LatAm is Happening”, organizado por sus servidores Software Guru y Nearshore Link, con el apoyo de la productora mexicana The Lift. El propósito de este meetup fue incrementar y fortalecer la relación entre empresas provenientes de Latinoamérica con el objetivo de compartir lecciones y generar negocio para todos los involucrados.
Lo impresionante del SXSW
Además de recibir a una cantidad impresionante de asistentes provenientes del mundo entero —tan solo el SXSW Interactive reune a 25 mil asistentes mientras que son cerca de 60 mil en el evento completo—, es importante destacar su impresionante capacidad de networking espontáneo, desde la oportunidad de conectar con la persona al lado tuyo en la fila del café, hasta la opción de asistir a reuniones formales. Este ambiente desemboca en una increíble generación de innovadoras ideas y nuevos negocios. Estamos orgullosos de saber que Latinoamérica ya esta aprovechando esta gran oportunidad, y mucho más de saber que podemos destacar en el competido mercado de las tecnologías emergentes. ¡Vamos con todo!
Software Guru
En los años pasados, SXSW Interactive ha incluido conferencias y paneles específicamente enfocados en Latinoamérica, y através de ellos hemos visto cómo la región ha madurado. Una de las sesiones de este año fué “Accelerating Killer LatAm Startups” con la participación de Bedy Yang (Brazil Innovators), David Weekly (Mexican.VC), Rodrigo Torres Picón (Quotidian Ventures) y Carolina Rossi (Startup Chile) en representación de Vanesa Kolodziej (BA Accelerator). Algunos de los puntos más relevantes tocados en este panel fueron: • En lugar de crear “otro Silicon Valley”, la estrategia de países como México y Brasil ha sido construir puentes entre el Valle y el ecosistema dentro de cada país. • Lograr que los startups locales en países como México y Brasil tengan una visión global ha sido un gran reto, a diferencia de países como Argentina, donde los startups nacen con una visión global. • Actualmente ya existen inversionistas interesados en Latinoamérica, pero todavía son precavidos. Están esperando un gran caso de éxito que valide a la región.
www.sg.com.mx |
Presencia en las Sesiones
.COLUMNA Tejiendo Nuestra Red
¿Cómo Llegué a Competir con Ivar Jacobson?
proyecto kulai-beh para omg
A
››“Más diablo por
La Dra. Hanna Oktaba es profesora de la UNAM, miembro del IPRC, y directora técnica del proyecto COMPATISOFT. hanna.oktaba@ ciencias.unam.mx
08
l principio de los 80´s cumplí 30 años, estuve por terminar el doctorado en la Universidad de Varsovia, Polonia. El tema de mi tesis fue la formalización lógica del concepto de apuntador (referencia) en los lenguajes de programación de entonces: Simula-67 y C. Por cierto, para la información de las nuevas generaciones, Simula-67 fue el primer lenguaje que introdujo el concepto de clase, objeto, herencia, métodos virtuales y co-rutinas (concurrencia); definido por tres noruegos en 1967 – Dahl, Nygaard y Myrhaug. Como ven los lenguajes orientados a objetos ya están por cumplir 45 años. En 1983 llegué a México y me dediqué a enseñar en la maestría en Ciencias sabe el de la Computación del IIMAS los conceptos de los lenguajes orientados a obviejo jetos, empezando por Simula 67 y luego C++. Las especificaciones algebraicas de los tipos de datos, como colas, pilas, árboles y los conceptos de concurrencia, paralelismo y distribución fueron también de mis temas favoritos. Al cumplir los 40 años, en la década de los 90´s, viví el auge de los lenguajes orientados a objetos. En la revista “Soluciones Avanzadas”, precursora del Software Gurú, editada por Carlos Vizcaíno, estuvimos difundiendo el conocimiento sobre este tipo de lenguajes comparándolos con los lenguajes funcionales (como LISP) y basados en la lógica (como Prolog). Sin embargo, para mí lo más importante de la década de los 90’s fue la publicación de los diferentes libros sobre los métodos de análisis y diseño de los sistemas implementados con los lenguajes orientados a objetos (OO). En este entonces me percaté de que los lenguajes OO no son el todo del conocimiento que necesita un desarrollador de sistemas de software para hacer buen trabajo. Faltaba algo más, las fases conceptuales del análisis (entendimiento de lo que se requiere) y del diseño (propuesta abstracta de la solución computacional) eran las que hacían falta. En esta época, Grady Booch [1], James Rumbaugh [2] e Ivar Jacobson[3] habían publicado libros importantes sobre estas fases. Los libros ofrecían las primeras prácticas basadas en la experiencia. Gracias a sus libros estos tres señores se vuelven mis ídolos. Cuando Booch logra juntar a Jacobson y a Rumbaugh en la empresa Rational y juntos en 1995 proponen ante el Object Management Group (OMG) a UML (Unified Modeling Language) como el estándar del lenguaje de modelado OO, la aceptación y el éxito fueron inmediatos. Posteriormente, juntos escriben tres libros [4,5,6] que marcaron la historia de los procesos de desarrollo de software basados en OO (Proceso Unificado) y el modelado de las vistas abstractas de los sistemas OO (UML). A partir de este momento, los contenidos de los cursos de la Ingeniería de Software en la UNAM, que ofrecemos con Lupita Ibargüengoitia, obligan a nuestros alumnos de la licen-
…”
ciatura y de la maestría a aprender y usar en los proyectos a UML y los elementos del Proceso Unificado. Llega el milenio nuevo, y al cumplir los 50 años me atrevo a desafiar, sin proponérmelo conscientemente, a Software Engineering Institute (SEI). Su modelo de SW-CMM y posteriormente CMMI fueron los referentes obligados para la industria de software. Pero yo me atrevo a pensar que los consejos que ofrece CMMI se pueden expresar de manera más sencilla. En 2002 comienza la iniciativa de PROSOFT para fortalecer a la industria mexicana de software. Como presidenta de la AMCIS (extinta Asociación Mexicana para la Calidad en Ingeniería de Software) propongo a la Secretaría de Economía desarrollar un modelo mexicano de procesos (basado en las versiones de los modelos y estándares existentes en ese entonces: CMMI, ISO/IEC 12207 e ISO 9000). El argumento fue el siguiente: estos modelos y estándares son muy buenos, pero… nuestra industria de software está conformada en 90% (¿o más?) por las MIPYMES. Primero hay que apoyarlas para que crezcan y se consoliden y luego que busquen a los modelos para más maduros, como es CMMI. Esta fue la idea principal que llevó a la creación de MoProSoft y su conversión en el estándar nacional. El esfuerzo posterior de probar MoProSoft en Iberoamérica, a través del proyecto COMPETISOFT (2006-2008), y su aceptación inesperada como base para el estándar ISO/IEC JTC1 SC7 Software and System Engineering (2006-2011), que culminó en la publicación del ISO/IEC Basic Profile en 2011 [7], ya es otro cuento. En México, creo que hasta la fecha pocos han entendido el valor de MoProSoft y, sobre todo, el significado para el país de elevarlo a nivel del estándar internacional. Mientras que en México se dispute si apoyar o no con financiamiento este proyecto, Brasil ya convirtió a ISO/IEC 29110 Perfil Básico en el estándar nacional y seguro lo va aprovechar pronto. Pero no me quejo, cumplí 60 años en 2011 y el destino me abrió nuevos horizontes. Primero, mi ídolo Ivar Jacobson convocó en 2010 a la comunidad de la Ingeniería de Software a refundar esta disciplina bajo la iniciativa de SEMAT (Software Engineering Method and Theory). En su momento les hice el reporte de esta rebeldía en mi columna de SG no. 32. El año pasado
››Por Hanna Oktaba Referencias: [1] G. Booch, “Object Oriented Design with Applications”, The Benjamin/Cummings, 1991. [2] J. Rumbaugh at al., “Object-Oriented Modeling and Design”, Prentice Hall, 1991. [3] I. Jacobson at al., “Object-Oriented Software Engineering, A Use Case Driven Approach”, Addison-Wesley, 1992. [4] G. Booch, J. Rumbaugh y I. Jacobson, “The Unified Modeling Language, User Guide”, Addison-Wesley, 1999. [5] I. Jacobson, G. Booch y J. Rumbaugh, “The Unified Software Development Process”, Addison-Wesley, 1999. [6] J. Rumbaugh, I. Jacobson y G. Booch, “The Unified Modeling Language, Reference Manual”, Addison-Wesley, 1999. [7] (http://standards.iso.org/ittf/PubliclyAvailableStandards/c051153_ISO_IEC_29110-5-1-2_2011.zip)
Software Guru
www.sg.com.mx |
participé en la fundación del SEMAT Latino América, de lo que también les conté en el no. 34 de SG. En este mismo año 2011 la iniciativa del SEMAT se convirtió en una convocatoria del Object Management Group para recibir propuestas de “A Foundation for the Agile Creation and Enactment of Software Engineering Methods (FACESEM)”. Justamente cuando salió la convocatoria de OMG, estuve reflexionando sobre el enfoque tradicional sobre los procesos. Los modelos existentes recogen muchas buenas prácticas, sea CMMI, MoProSoft, ISO/IEC 12207, ISO/IEC 29110. Entonces ¿por qué a las empresas les cuesta tanto trabajo de adoptarlos? Por otro lado, aparecieron métodos ágiles, que prometen “el mar y las estrellas con 13 meses sin intereses”, que son una tentación muy fuerte pero incierta. Algo no está funcionando. Empecé a vislumbrar otro enfoque. En vez de “vender” a las empresas los modelos que tienen que ponerse “a chaleco”, que tal si les damos las herramientas sencillas de documentar sus prácticas diarias y que ellos mismos las modifiquen en función de lo que vayan aprendiendo de la experiencia o del conocimiento traído del exterior. Así que decidí lanzarme a la aventura de participar en la convocatoria de OMG. Aproveché que ya tengo dos manos de obra “barata”, que son mis alumnos de doctorado: Miguel Ehécatl Morales Trujillo y Magdalena Dávila Muñoz. Mi ingenuidad, consecuencia de trabajar tantos años en la academia, no me avisó que para participar en la OMG necesito dinero. Para ser miembro de la OMG con derecho de proponer nuevos estándares y votar, hay que pagar $5,500 USD anualmente. Por eso en su momento hice un llamado de apoyo económico a este proyecto de investigación a través del infalible Software Gurú, y lo volveré a repetir en esta columna. En el noviembre del año pasado enviamos a OMG la carta de intención de participar en la convocatoria de FACESEM. El 22 de febrero 2012 mandamos la propuesta bajo el nombre de KUALI-BEH Software Project Common Concepts. KUALI en náhuatl significa “bueno” y BEH en maya significa “camino”. Estamos proponiendo un “buen camino“ para definir las prácticas y métodos para el desarrollo de software, que las propias organizaciones capturen, adapten y mejoren en función de su experiencia y maduración. Al día siguiente nos enteramos de que somos competidores de, ni más ni menos, Ivar Jacobson. El marzo 21, en Reston cerca de Washington, nos tocó presentar KUALI-BEH ante la comunidad de OMG. Un día antes Jacobson intentó convencernos para que nos uniéramos a su propuesta llamada ESSENCE. Le dijimos que necesitamos tiempo para pensarlo, por lo tanto el 21 de marzo nos presentamos como propuestas competidoras. La nuestra recibió buenos comentarios, que nos alentaron mucho. El día siguiente Jacobson nos pidió que le hiciéramos la propuesta de unir ambos enfoques, la cual se la enviamos a finales de marzo. Ahora la pelota está de su lado (más bien de su grupo: Fujitsu, IBM, Model Driven Solutions y otros) En agosto hay que enviar a OMG una propuesta mejorada (o fusionada con la de Jacobson) y defenderla en la reunión de septiembre en Jacksonville. Mientras tanto estamos probando KUALI-BEH con la comunidad mexicana de desarrollo de software a través de un Taller Colaborativo en Métodos de Ingeniería de Software, que se realiza en modalidad virtual y presencial. Para continuar necesitamos recursos. Les reitero la invitación para apoyar este proyecto de investigación aplicada. Las aportaciones pueden ser en efectivo (con recibo de la UNAM deducible de impuestos) o en especie (inscripciones, boletos de avión, hoteles, libros, equipo de cómputo). Los interesados favor de comunicarse directamente conmigo hanna.oktaba@ciencias.unam.mx. Por lo pronto quiero agradecer públicamente a los primeros patrocinadores (empresas y personas físicas): Magnabyte, Software Guru, Ultrasist, JPEConsultores, Innevo, Hugo Rojas Martínez y Evaristo Fernández Perea. A los que piensan que al cumplir 30 años se les acaba la vida les puedo asegurar que “Más sabe el diablo por viejo…”. No se pierdan el siguiente capítulo.
.COLUMNA Mejora Continua
Sobre Administración del Cambio y otras Barbaridades El Jeet Kune Do es como un dedo apuntando a la luna, no fijes tu vista en el dedo de tal manera que pierdas toda la gloria del milagro celestial. -Bruce Lee
E
sta semana tuve varias conversaciones sobre cambio organizacional y cada vez me desagrada más el concepto de administración del cambio, o al menos, la interpretación que escucho. Parece ser que para asegurar un cambio organizacional tranquilo y sin incidentes mayores es necesario utilizar las estructuras pertinentes, principalmente de comunicación, para controlar el esfuerzo. Esto incluye una definición clara de la visión de futuro, establecida y comunicada claramente por un directivo importante que apadrina el cambio, seguido por la participación de expertos que crean la solución adecuada a lo que se quiere lograr (muchas veces creemos que ese es nuestro rol como expertos de calidad y productividad) la cual es transmitida a las masas con planes de comunicación los cuales definen exactamente qué y cuándo se debe de comunicar, logrando así que el cambio sea aceptado, implementado y corroborado de acuerdo a tiempos claramente establecidos. No se a ustedes, pero en mi experiencia esto suena más bien a una dictadura que a una democracia. Cambiar una organización no se ambiar una hace a través de implantar mandamientos divinos. El cambio no se administra, organización no se el cambio se lidera. Aunque comunicar es muy importante, el cambio es más sobre hace a través de escuchar preocupaciones, impedimentos y motivaciones, el cambio se lleva a cabo implantar manda paso a paso, sin estar casado con una forma única de actuar, normalmente se mientos divinos ejecuta en forma no lineal y discontinua.
››“C
.”
Para establecer un cambio organizacional, lo primero y lo más importante, creo yo, es: entender ¿por qué?
Luis R. Cuellar es director de calidad a nivel mundial de Softtek. Es reconocido por la ASQ como Certified Quality Manager, Certified Software Engineer y Six Sigma Black Belt. @lcuellar
10
Esta es la pregunta que motiva al líder, es una pregunta que surgirá continuamente y provendrá de toda la organización, inclusive de las personas que apoyan el cambio, ¿Por qué debemos cambiar si hasta ahora nos ha ido bien? ¿Por qué ahora? ¿Por qué nosotros?, Esta pregunta requiere de una respuesta clara y contundente, esta contundencia se obtiene al establecer una relación fuerte entre el cambio y los objetivos económicos de la empresa, respuestas como: “porque así lo pide CMMi”, “porque eso dice la auditoria”, “porque el jefe dijo”, “porque así lo establece las mejores prácticas de la industria”, no te llevarán muy lejos sobre todo en cambios importantes. Adicionalmente el enfoque de la comunicación es asegurar que las respuestas a esta pregunta sean las mismas sin importar quien la responda, ya sea el líder del cambio, el dueño del cambio o cualquier persona involucrada, esta comunicación es bidireccional no es una presentación sino una conversación continua, cada persona que no tenga clara la respuesta o que no esté de acuerdo con ella representa una posible falla a los planes de cambio y este se comporta como un arrollo queriendo regresar a su cause cuando llega al borde de una presa, demasiadas fallas en
la pared de la presa y la presión la desmorona. Segundo punto: escuchar, escuchar y escuchar, ¿Por qué se resisten los diferentes individuos?, ¿A qué le tienen miedo?, ¿Les preocupa la falta de conocimiento?, ¿Les preocupa que no les conviene el cambio o que complicara otras actividades de las cuales son responsables?, ¿Ven como muy difícil el nuevo comportamiento?, ¿Están surgiendo nuevos problemas no previstos por el cambio? De acuerdo a la teoría de sistemas, las organizaciones son sistemas complejos que se encuentran en balance consigo mismos, esto quiere decir que la forma en la que se comportan los individuos de una organización depende en gran medida de su medio ambiente, piensa en cómo un individuo se comporta diferente al cambiar de empresa. Para poder llevar acabo un cambio grande es necesario no solo generar, entrenar y dar seguimiento a los nuevos comportamientos, sino modificar aquellos que mantienen fijo el comportamiento anterior, escuchar te da el medio de reconocer esa relación con la forma anterior de hacer las cosas, identificar su origen y establecer una estrategia para cambiarlas. Finalmente el cambio se hace paso a paso, esto implica que el plan es sumamente dinámico y puede cambiar en base a la retroalimentación del día con día, repentinamente aparecen nuevas tareas y desaparecen tareas que ya no son importantes, aun cuando todos los directivos de una organización apoyen una propuesta, las presiones diarias del día con día llevan a modificar la dirección y hasta a retroceder en los que se busca. Esto implica que la persona que lidera el cambio tiene que tener una visión clara y fija de en dónde se encuentra (no en dónde debería encontrarse) hacia dónde va, y cómo el siguiente paso que da lo acerca a su objetivo. No se puede estar casado con un solución en particular ni una forma de resolver el problema, las soluciones cambian y lo único importante es cómo el siguiente paso te acerca al objetivo que buscas, es de vital importancia no dejar que un paso en una dirección diferente modifique tu objetivo sino el objetivo modifique cual será ahora el siguiente paso. El perder o ganar una batalla no puede distraerte de ganar la guerra. Todo cambia continuamente, el cambio debe de ser bienvenido, pero desafortunadamente, no siempre lo es, en la industria de sistemas continuamente vemos proyectos de gran tamaño que se ven frustrados al tratar de implementar grandes cambios en organizaciones que no están listas para hacerlo, por más administrado que estos sean. El Líder debe de dirigir a una nueva forma de hacer las cosas, debe de involucrar y escuchar a todas las personas que participan y apoyarlas a lograr el objetivo, no es suficiente decirlo sin que se tenga que eliminar todas las posibilidades de no lograrlo, y como en el Jeet Kune Do, el foco no esta en cómo debe de hacerse sino en la majestuosidad que podemos obtener al lograr una nueva y mejor forma de hacer las cosas.
››Por Luis Cuellar
www.sg.com.mx |
Software Guru
.HERRAMIENTAS Y TECNOLOGÍAS Lo Que Viene
1 RubyMotion
Construye apps para iOS en Ruby
RubyMotion permite construir aplicaciones nativas para iOS utilizando el lenguaje de programación Ruby. Está basado en MacRuby, una implementación de Ruby sobre Objective C, pero utiliza un nuevo compilador estático basado en LLVM que genera código altamente optimizado. Gracias a esto, las aplicaciones hechas con RubyMotion corren tan rápido como su equivalente en Objective C. Además, pueden acceder las APIs estándar de iOS, así que tienen acceso a las mismas capacidades que desde Objective C. RubyMotion no utiliza XCode, sino que provee herramientas de línea de comandos para soportar un workflow al estilo tradicional de Ruby, incluso usando Rake para hacer los builds. Más información en http://rubymotion.com
2
El desarrollo de aplicaciones con I/O asíncrono ha tomado mucha fuerza en los últimos meses, y poco a poco se está convirtiendo en “la manera default” para construir nuevas aplicaciones server-side. La tecnología que ha abierto brecha en ese sentido y ha obtenido mayor atención es Node.js, sobre la que ya hemos publicado algunos artículos en SG. Ahora surge Vert.x, que utiliza un modelo de programación muy similar al de Node.js, pero funciona sobre la Java Virtual Machine y gracias a ello soporta un mayor espectro de lenguajes incluyendo Java, Groovy, Ruby y Javascript. Vert.x todavía es bastante nuevo, pero dada su naturaleza consideramos que ganará tracción rápidamente.
Vert.x
La alternativa políglota a Node.js
Más información en http://vertx.io
Cloud9 IDE
Un IDE pensado para la nube
3
En la categoría de ambientes de desarrollo integrado (IDE), uno de los productos al que le hemos estado siguiendo la pista los últimos meses y que parece que ya está despegando, es Cloud 9. Este es un IDE diseñado específicamente para el desarrollo de aplicaciones en la nube. Estas son algunas de sus características principales. Es basado en web, es decir que se ejecuta en el navegador. Está principalmente enfocado a programación en Javascript, NodeJS y HTML5, pero soporta otros lenguajes como Python y PHP. Se integra de forma transparente con repositorios de código en línea como GitHub y BitBucket, entre otros. Las aplicaciones fácilmente se despliegan a ambientes PaaS como Heroku, Joyent y Windows Azure. Cuenta con una modalidad para editar usando comandos de vi. Provee una línea de comando que soporta comandos Unix para el manejo de archivos, así como comandos de npm (node package manager). Más información en http://c9.io
4
Uno de los campos de nuestra profesión con mayor proyección hacia los próximos años es el denominado machine learning, al que en español se empieza a referir como “aprendizaje automático”. El aprendizaje automático es una rama de la inteligencia artificial enfocada al desarrollo de sistemas que aprenden a partir de datos empíricos y evolucionan su comportamiento de acuerdo a esto. Hasta ahora, el grueso del trabajo hecho en este campo ha sido académico y de investigación, pero poco a poco comienzan a surgir los pioneros con una oferta comercial. Uno de ellos es BigML, quienes ofrecen un servicio de machine learning en el que tú subes fuentes de datos y en base a éstas BigML genera modelos predictivos que puedes incorporar directamente en tus aplicaciones por medio de una API tipo REST. Definitivamente este es un campo muy joven en el que iremos ir y venir muchas tecnologías y empresas en los próximos años, pero bien vale la pena ir conociendo qué están haciendo los pioneros. Más información en http://bigml.com 12
BigML
Machine learning al alcance de todos
.COLUMNA
Tendencias en Software
La Verdadera T.I. Híbrida ››“Tendremos que enfrentar
Escenarios básicos
La “nube pública” puede ofrecer una plataforma de consolidación que permite ejecutar cargas de trabajo secundarias a un menor costo operativo y puede facilitar establecer ambientes de desarrollo y prueba para ser eventualmente desplegado a la nube o a un centro de datos tradicional. Una “nube privada” puede ofrecer control adicional al que ofrece públicamente. Es claro que el futuro de la plataforma tecnológica es habilitar una “Tecnología de Información híbrida”: 1. La capacidad de trasladar máquinas virtuales en diversos hipervisores, con administración, identidad y modelo de programación en común entre nubes privadas y públicas. 2. Crear una campaña publicitaria en medios sociales almacenando la información en la nube pública pero manteniendo una copia en una base de datos en el interior de una empresa. La clave aquí es la existencia de una herramienta que permita hacer esto eficientemente.
Escenarios avanzados
Las posibilidades de combinar la nube privada y pública van mucho más allá de lo que a primera vista se ofrece. Exploremos algunos ejemplos: 1. Establecer una solución de recuperación en caso de desastres para base de datos. En este escenario, se utiliza un servidor primario físico o virtualizado dentro de la empresa y en una máquina virtual en la nube pública el secundario. 2. Verdadera aptitud de incrementar la capacidad de forma transparente cuando ésta se rebasa en la nube privada. 3. Aplicaciones que no sólo puedan ser implementadas en nubes públicas o privadas indistintamente sino en donde esto pueda ser seleccionado a nivel de sus distintos componentes. Por ejemplo utilizar indistintamente una base de datos tradicional o una ofrecida como servicio. 4. La capacidad de “entender” lo que está sucedien13
retos existentes como la seguridad, y nuevos retos como lo es el fraude en el uso de capacidad de cómputo sin pagar por ella.” do dentro de las máquinas virtuales y cómo puede mejorarse el desempeño de los servicios que están operando internamente. Una plataforma para TI híbrida deberá ofrecer un modelo de licenciamientos que permita reubicar licencias existentes para uso interno a una nube pública. Permitiendo realizar las ventajas de cada modelo como mejor le convengan a una empresa. Estableciendo los límites de costo y capacidad con facilidad y en muy pocos pasos.
El destino 2015
Creo que la mayor parte de las plataformas tardarán tres a cinco años en llegar a esta visión. La infraestructura será híbrida, elástica, de bajo consumo de energía, siempre disponible y auto-administrada. El tiempo de recuperación en el peor escenario, se reducirá dramáticamente de 0 a 30 minutos para casos muy graves. Las aplicaciones se adaptarán al usuario, organización y grupos sociales. Contarán con inteligencia derivada del razonamiento de grandes volúmenes de datos y serán altamente adaptables (fáciles de extender y combinar con otras aplicaciones). Operarán eficientemente en cualquier geografía. Tendremos que enfrentar retos existentes como la seguridad y nuevos retos, como lo es el fraude en el uso de capacidad de cómputo sin pagar por ella. Los requerimientos legales y fiscales de las distintas geografías continuarán siendo temas complejos. En el génesis de la informática, aun nos encontramos lejos del séptimo día.
Software Guru
l “cómputo en la nube” se distingue de una plataforma altamente virtualizada por lo siguiente: 1. Todos los recursos – cómputo, almacenamiento y red – se comparten, habilitando el provisionar de forma dinámica de aplicaciones y servicios. 2. Autoservicio. Mediante un portal se pueden solicitar, configurar y administrar aplicaciones y recursos como servicios. 3. Elasticidad. Con base en los requerimientos de negocio los recursos se reducen o aumentan. 4. Ofrece costo basado en uso, pagando sólo por los recursos utilizados
www.sg.com.mx |
E
Luis Daniel Soto Maldonado (@ luisdans) labora en la división de negocio de servidores y herramientas de Microsoft Corp. Figura 1. La T.I. Híbrida
.TECNOLOGÍAS Tutorial
Sinatra
aprendamos a hacer un
CRUD
S
inatra es un DSL (Domain Specific Language) para la creación rápida de aplicaciones web en Ruby con un mínimo esfuerzo. Sinatra se destaca por su simplicidad y ligereza, además de contar también con libertad de elección ya que no impone el uso de patrones ni librerías específicas. En este tutorial veremos un ejemplo sencillo de cómo hacer una aplicación web con Sinatra tipo CRUD (create, read, update, delete). Utilizaremos Ruby 1.9.2, Datamapper como ORM y PostgreSQL como base de datos.
Modelo
Iniciamos creando un archivo llamado sinatra_test.rb. Este será el archivo que contenga la lógica de nuestra aplicación. Lo primero que vamos a incluir es el siguiente código: require ‘sinatra’ require ‘data_mapper’ configure do DataMapper.setup(:default, ‘postgres://localhost/development’) DataMapper.setup(:default, { :adapter => ‘postgres’, :host => ‘localhost’, :username => ‘sysdba’ , :password => ‘s3cret’, :database => ‘development’}) end
Lo primero que hace el código es indicar que utilizaremos las “gemas” sinatra y data_mapper. Luego, configuramos DataMapper para conectarse a nuestra base de datos llamada ‘development’, con el username ‘sysdba’ y password ‘s3cret’. A continuación definimos el modelo de nuestra aplicación. class Linea include DataMapper::Resource property :cve_linea, String, :length => 4, :required => true, :key => true property :linea, String, :length => 30, :required => true end
Nuestro modelo consta tan sólo de una clase Linea, con dos propiedades: cve_linea y linea. Sinatra se encargará de crear la tabla correspondiente en la base de datos. Para pedir que Sinatra borre las tablas que existan en la base de datos (si es que existen) y cree nuevas a partir de nuestros modelos agregamos: DataMapper.auto_migrate!
Si por el contrario, las tablas ya existen y no queremos borrarlas sino actualizarlas con la nueva definición de los modelos, usaríamos DataMapper.auto_upgrade!
Ruteo
Sinatra usa rutas (routes). Una ruta es un método HTTP (get, post, etc.) junto con un patrón que representa uno o más URLs. Cada ruta 14
››Por Salomón Rincón
se asocia con un bloque. Definamos la ruta para la página principal de nuestra aplicación. get ‘/’ do erb :index end
El código anterior indica que cuando el usuario entre al URL ‘/’ mediante el método get, queremos que se procese una vista llamada index utilizando el lenguaje de plantillas erb. Vale la pena mencionar que Sinatra soporta diferentes lenguajes de plantillas como erb, haml y builder, entre otras. De forma similar, al recibir una petición get en ‘/linea’ mandamos invocar la vista reg_linea. get ‘/linea’ do erb :reg_linea end
Ahora definimos un bloque que atiende la petición ‘/listalineas’ que, como se podrán imaginar, nos da un listado de líneas. Crearemos una variable @lineas donde pondremos todos los registros del modelo Linea (que se mapea a la tabla lineas en la BD) e invocamos la vista lista_lineas para que despliegue el listado. get ‘/listalineas’ do @lineas = Linea.all :order => :cve_linea erb :lista_lineas end
Para crear o actualizar una línea que tengamos almacenada, enviaremos peticiones tipo POST a ‘/linea’. El siguiente bloque se encarga de manejar estas peticiones. post ‘/linea’ do if !campo_vacio(params[:cve_linea]) and !campo_vacio(params[:linea]) @linea = Linea.new(:cve_linea => params[:cve_linea].upcase, :linea => params[:linea].upcase) if @linea.save redirect “/linea/#{@linea.cve_linea}” else redirect ‘/linea’ end else redirect ‘/campo_vacio’ end end
Lo primero que hacemos es validar que los parámetros cve_ linea y linea no estén vacíos. Si la validación es exitosa creamos una nueva instancia de Linea, mapeando el valor de sus propiedades con los parámetros recibidos en la petición. Como se darán cuenta, estamos convirtiendo los valores a mayúsculas antes de asignarlos. Posteriormente intentamos guardar nuestro
.TECNOLOGÍAS Tutorial
En esta ruta lo único que hacemos es buscar el registro correspondiente a la clave de línea que recibimos como parámetro y lo guardamos en la variable @linea. Si el registro fue localizado, llamamos a la vista cons_linea que se encarga de presentar el detalle. Para mantener breve el tutorial, no se incluye aquí el código para definir las rutas para editar y borrar registros, pero imagino que a estas alturas ya tienen una buena idea de cómo sería. Al final del artículo puedes consultar cómo obtener el código fuente completo de esta aplicación, donde vienen todas las rutas.
Vistas
En el directorio en donde guardamos el archivo sinatra_test.rb crearemos un directorio llamado ‘views’ donde pondremos los archivos que definen las vistas de la aplicación. La primer vista que crearemos es la plantilla base en la que irán embedidas las otras vistas. El archivo de dicha vista se debe llamar layout.erb (la extensión .erb, es porque estamos utilizando el lenguaje de plantillas erb). El contenido de layout.erb es el siguiente: <html> <head> <title>Ejemplo Sinatra</title> <meta httpequiv=”ContentType” content=”text/html; charset=utf8” /> </head> <body> <%= yield %> </body> </html>
Como se puede apreciar, es código HTML común y corriente, con una sola línea de código en Ruby (<%= yield %>). Cada que se manda a llamar a una vista con erb, se utiliza esta plantilla y el sistema sustituye la línea <%= yield %> por el código de la vista correspondiente. Nuestra vista index puede ser algo tan sencillo como: <h1>Menú Principal</h1> <p><a href=”/linea”>Registro de líneas</a></p> <p><a href=”/listalineas”>Listado de líneas</a></p>
<form action=”/linea” method=”post”> <label>Clave de línea </label> <input type=”text” name=”cve_linea” id=”cve_linea”> <br/> <label>Línea </label> <input type=”text” name=”linea” id=”linea”> <br/> <input type=”submit” value=”Guardar”/> </form>
A continuación definimos la vista cons_linea que muestra el detalle de una línea. Para ello recurrimos a la variable @linea que declaramos al definir la ruta get ‘/linea/:cve_linea’. Dicha variable contiene el registro correspondiente a la clave de línea que se recibió en el parámetro :cve_linea <label>Clave: </label><%= @linea.cve_linea %><br/> <label>Línea: </label><%= @linea.linea %> <p><a href=”/linea”>Registrar una línea</a></p> <p><a href=”/”>Menú Principal</a></p>
Ahora veamos el código de la vista que muestra el listado de líneas. Recordemos que al recibir las peticiones a esta ruta generamos una variable @lineas con el contenido de todas las lineas en la base de datos. <p>Líneas registradas: <%= @lineas.length %></p> <table> <% @lineas.each do |linea| %> <tr> <td><%= linea.cve_linea %></td><td><%= linea.linea %></td> <td><a href=”/editlinea/<%= linea.cve_linea %>”>[editar]</a></td> <td><a href=”/borralinea/<%= linea.cve_linea %>”>[borrar]</a></td> </tr> <% end %> </table> <p><a href=”/”>Menú Principal</a></p>
Por razones de espacio, no incluyo aquí el código del resto de las vistas, pero el código completo incluyendo las rutas y funcionalidad para editar y borrar, así como el uso de una hoja de estilos personalizable, se puede descargar en: http://salomonrt.wordpress.com/2011/09/28/instalar-sinatra-postgresql-datamapper-endebian-squeeze/
Ejecutar la aplicación
Para ejecutar nuestra aplicación, vamos al directorio en donde tenemos el archivo sinatra_test.rb y en la línea de comando tecleamos: ruby sinatra_test.rb
Una vez que este corriendo nuestra aplicación, podremos accederla con un navegador en la dirección: http://localhost:4567 (por default Sinatra escucha en el puerto 4567). .BIO
Salomón Rincón es Director General de Top Systems y catedrático en la Universidad Popular Autónoma del Estado de Puebla (UPAEP). srincon@topsystems.com.mx
15
Software Guru
get ‘/linea/:cve_linea’ do @linea = Linea.get(params[:cve_linea]) if @linea erb :cons_linea else redirect ‘/linea’ end end
La vista reg_linea con la forma de captura para registrar líneas sería:
www.sg.com.mx |
registro en la base de datos (save). Si tenemos éxito, redireccionamos a la ruta para consultar la línea en cuestión, y si no lo tenemos redireccionamos a la ruta ‘/linea’ (estas redirecciones se hacen con el método get). El siguiente bloque de código atiende la ruta para mostrar el detalle de una línea específica.
Logra Pitches Épicos
L
a palabra inglesa “pitch” es una presentación verbal (y visual a veces) concisa de una idea para una película o serie de televisión, generalmente hecha por un guionista o director a un productor o ejecutivo del estudio, con la esperanza de atraer financiamiento de desarrollo para invertir en la creación de un guión. El concepto de pitch aplica de la misma forma para ideas de negocio como para guiones de películas. El fin es el mismo: obtener la credibilidad de tu idea y conseguir financiamiento. Estos últimos meses he estado participando en eventos como Startup Weekend donde he conocido a gente increíble. En el camino he escuchado cientos de ideas y cientos de pitches. También he tenido oportunidad de ayudar a algunos a preparar su presentación (pitch + keynote) final, y hay un par de consejos que quiero compartir con ustedes, los cuales creo que pueden ser de interés para quien tenga que presentar una idea de negocio ante un panel y les serán útiles para presentaciones que tengan una duración alrededor de los 10 minutos, no son recomendables en pitches rápidos de 1 minuto o menos.
“Hola, mi nombre es...”
Empieza tu presentación diciendo quién eres. No necesitas recitar tu currículum, una vez escuché a alguien decir en qué kinder había estudiado, nadie necesita escuchar eso. A nadie le importa si te dieron el premio al mejor estudiante o si haces el flan napolitano más rico del mundo (a menos de que vayas a vender flanes napolitanos). Sólo presentate rápido y di qué sabes hacer. También es importante que, 16
››Por Luis López
si tu equipo no está presente, menciones rápidamente sus nombres y qué hace cada uno de ellos. Eso va a dar cierta seguridad de que no te sacaste la idea de la manga y que tanto tu equipo como tú tienen ciertos conocimientos para hacer de esa idea un éxito. Después di qué haces ahí parado. Recuerdo que la primer diapositiva, del keynote con el que presentaba Bandtastic decía: “Amamos la música (bueno, Fabian no tanto)”. Di que te mueve, porqué estás ahí y qué es lo que te apasiona. Este punto puede ser el más cursi y romántico de tu presentación pero créeme, es muy importante.
Haz que duela… mucho
Ya que dijiste qué te mueve, ahora cuenta el problema. Hazme sentir tanto dolor que quiera gritar:“¡¿Porqué nadie ha resuelto esto?!” Da números, fotos, gráficas de por qué está hecho un reverendo caos “equis” o “ye” y explica porqué necesita una solución. Si tu idea es muy compleja, este es el momento para definir términos complejos y explicarlos. En este punto necesitas crear empatía con los que te estén escuchando: Haz que duela,. haz preguntas y expón al enemigo. Esto es como una buena obra de teatro o película porque toda buena película tiene un enemigo, personificado o no, siempre hay un enemigo. Crea ese enemigo, haz que todos lo detesten y quieran eliminarlo.
Presenta al héroe
Y claro, como toda buena película, siempre hay un héroe. Tú eres el héroe. Tu idea revolucionaria es el héroe que viene a rescatar al mun-
.EMPRENDIENDO Industria
Ya que presentaste al héroe (y su logo), es hora de mencionar sus superpoderes y cómo estos van a salvar el mundo. Describe tu solución. Al hacer esto, muchos cometen el error de decir algo como lo siguiente: “Plataforma multifuncional encargada de gestionar los contenidos específicos de la industria restaurantera de la ciudad, basada en la nube con servicios de notificaciones Push a teléfonos inteligentes, capaz de generar inteligencia de negocio, bla bla bla…” No lo compliques, porque es muy probable que haya gente que no entienda de tecnología o en general de lo que estás diciendo, primero piensa en cómo lo dirías en un ‘tweet’ (140 caractéres para definir tu solución), después piensa en cómo reducirías ese tweet a 5 palabras. Aprende de los grandes, cuando Steve Jobs presentó la MacBook Air, pudo haber citado cada una de las características de la misma. En cambio, solo dijo: “The world’s thinnest notebook” Haz una diapositiva con esta frase de 5 palabras. Hazla tan impactante que cuándo pregunten de qué trató tu pitch, todos respondan usándola.
Tres es el número mágico
Ahora, explica por favor cómo funciona. Ya dijiste qué hace, ahora dime cómo lo hace. Reduce las características que quieres explicar a tres, porque es un número mágico que hace más fácil de recordar las ideas. “Nuestra app hace esto, aquello y lo otro”. Los comediantes saben que tres es más gracioso que dos. Los escritores saben que tres es más dramático que cuatro. Tres es más persuasivo que cinco. Toda gran película, libro u obra tiene una estructura de tres actos. Había tres mosqueteros, no cinco. Ricitos de oro encontró tres osos, no cuatro. Había tres chiflados, no dos. En la declaración de independencia de EUA dice que los americanos tienen derecho a “la vida, libertad y la búsqueda de la felicidad”, no sólo a la libertad. Tres es el número mágico. Toma unos minutos y ve este video en el que Steve Jobs presenta el primer iPhone. Busca “el villano, el héroe y la regla de tres”.
Núm3r0s
Una vez explicada la idea, da una razón para que te crean. Esta puede ser la parte más aburrida del pitch, es la parte en la que hablas de los usuarios, del mercado y de cómo vas a ganar dinero. Por favor, no exageres, he escuchado con mucha frecuencia: “Si obtenemos 1% del mercado de equis o ye, significa que tendremos 1,000,000 de usuarios el primer mes”. No asumas nada, si has hecho algún tipo de validación de la idea, este es el momento de mostrarla con: encuestas, usuarios actuales, ventas, etc. En lo personal, evito las proyecciones, creo que nunca sabrás cómo se comportará el mercado, sino hasta que lanzas tu producto; pero para algunos es importante que tu presentación las incluya. Aunque en realidad no muestren lo que va a suceder, refleja de cierta forma tu visión 17
“Cállate y toma mi dinero...”
Ahora, ya que has explicado todo, si estás hablando con un inversionista o eres parte de algún concurso, di para qué quieres el dinero. Muchos no saben contestar esta pregunta, prepárala. No significa que tengas que detallar cada una de las cosas en las que ocuparás el dinero, solo di algo como: “Necesitamos una inversión inicial para arrancar operaciones y crear un prototipo funcional”. Este es el momento en el que muestras tu avance. Se llevan puntos extra, los que tengan un producto o un prototipo sin haber recibido inversión, significa que no estás esperando dinero para avanzar con tu solución, pero que necesitas un empujón para llevarla al siguiente nivel.
Una gran película, tiene un gran final
Ahora estás listo para dar las gracias. En vez de cerrar con una frase como: “Eso es todo gracias”, intenta algo como: “Muchas gracias por su atención, con gusto responderé las dudas que tengan sobre......” Así, matas dos pájaros de un tiro: estás en control de la situación, diciendo que ya “pueden” preguntar y además tienes la oportunidad de encaminar las preguntas a un tema específico, pudiendo evitar preguntas incómodas sobre algún punto en el que haya flaqueado tu presentación. Usa la última diapositiva de tu presentación para tu logo, o cualquier cosa que quieres que recuerden los que te escucharon. Si hay tiempo para preguntas y respuestas, esta diapositiva se quedará detrás de ti mientras contestas. Aprovecha y deja una imágen de lo que quieres que recuerden.
Tips técnicos
Si tienes una Mac, no uses PowerPoint. Si tienes una PC, tampoco uses PowerPoint, por favor consigue una Mac y usa Keynote. Aún si vas a usar Keynote, no uses las plantillas predeterminadas, empieza con una en blanco o negro. Elige un color, una fuente y una sola transición para todas tus diapositivas. Últimamente Prezi se puso de moda, si vas a usar Prezi no hagas giros y movimientos muy bruscos porque marean. Un último consejo, usa un control remoto. Pararte junto a tu computadora o peor aún, pedirle a alguien que le cambie a los slides cada vez que dices: “siguiente” es lo peor que le puede pasar a tu pitch. Compra un control remoto o usa tu iPhone o iPod touch conectado a la misma red Wifi como remoto. Si no tienes ninguna de las anteriores, usa un mouse bluetooth, agárralo con tu .BIO mano y dale clic para cambiar a Luis López Méndez, conocido como Lulo (@lulomx), es emprenla siguiente diapositiva. dedor, y cofundador de Bandtastic Dejo un link a mi SpeakerDeck, donde he subido algunos de los keynotes que he hecho para presentar ideas: speakerdeck.com/u/lulo
y es parte activa del ecosistema de emprendimiento en México. A sus 22 años ha sido mesero, baterista, vendedor, fotógrafo, instructor y hasta mentor. Hace unos meses ganó Wayra México, dejó la escuela, y ahora intenta ayudar a que la gente viva la música que ama, y de paso, cambiar la industria.
Software Guru
En menos de un tweet
del negocio y a lo que aspiras. Recuerda: Todo se ve bien en el “Excel”, así que no te emociones si “Excel” dice que serás millonario en 2 meses.
www.sg.com.mx |
do de ese GRAN problema que presentaste antes. Haz que tu idea sea épica, heroica, caída del cielo. Haz una diapositiva (slide) solo con el logo de tu idea (si no tienes un logo, es un buen momento de hacerlo o pagar porque alguien te lo haga, no presentes sin un logo).
JUEGOS CASUALES ¿Que estás esperando? ››Por Pedro Galván
El término “juegos casuales” se utiliza para describir un segmento grande y creciente de la industria de videojuegos. Los juegos casuales tienden a ser aquellos con una dinámica de juego sencilla, diseño atractivo, y una curva de aprendizaje muy corta, por lo que en cuestión de minutos los usuarios pueden aprenderlos y disfrutarlos. El objetivo de los juegos casuales es llegar a la mayor audiencia posible, especialmente los consumidores que no cumplen el perfil del “gamer” tradicional.
POR QUÉ CREAR JUEGOS CASUALES El segmento de juegos casuales ha tenido un crecimiento explosivo en los últimos años y crear juegos casuales se ha convertido en una opción atractiva y redituable para muchos. Estos son algunos de los principales factores que influyen en este crecimiento. Bajos costos de producción. Para crear juegos casuales no es necesario licenciar costosos SDKs o motores de gráficas. Ciertamente facilita las cosas contar con algunas herramientas, y en el caso de algunas plataformas (ej. iOS) pagar una cuota anual para estar en su Developer Program y poder publicar juegos en su app store, pero estos costos son realmente bajos comparado al costo de herramientas y membresías requeridos para crear juegos para consola o computadora personal. Por otro lado, tampoco es necesario contar con equipos con gran cantidad de personas. La mayoría de los juegos casuales son creados por equipos pequeños, con 5 personas o menos. Para juegos sencillos, incluso es viable que una persona pueda crearlo por sí solo. Facilidad de distribución. Hasta hace unos cuantos años, el canal de distribución era uno de los principales limitantes para los juegos casuales. El canal más común eran portales web donde se podían usar en línea o descargar, y esto limitaba las opciones de modelo de negocio. Pero hoy en día las cosas son muy distintas, y existen dos canales principales para juegos casuales: los app stores/marketplaces incluidos en las principales plataformas y sistemas operativos, y Facebook. Gracias a ellos, los desarrolladores pueden facilmente acceder a mercados con millones de usuarios, todo mediante un simple “submit”. Ciertamente hay muchos aspectos que tomar en cuenta para maximizar la visibilidad/impacto de tu juego en un app store o en Facebook, pero eso puede llevarse otro artículo completo así que no entraré en esos detalles —aunque creo que sería buena idea publicar un artículo sobre ese tema en SG.
.BIO Pedro Galván (@pedrogk) es cofundador y director de Software Guru.
18
PRINCIPAL JUEGOS CASUALES
TIPS PARA CREAR JUEGOS CASUALES EXITOSOS Estos son algunos tips que comparte Tom Higgins, evangelista de la empresa Unity, en su artículo “The business of casual gaming” [3]. El artículo tiene ya varios años (es pre-app store) por lo que había algunos tips que ya no aplican respecto a la distribución de juegos, pero he dejado los demás:
HAZ QUE SEA INTERESANTE VOLVERLO A JUGAR Diseña tu juego de tal manera que sea divertido jugarlo en repetidas ocasiones, trata de mantener a los usuarios regresando por más. Puedes hacer esto ofreciendo caminos de juego alternos y armas/configuraciones distintas. ENFOCA TUS ESFUERZOS Evita gastar mucho tiempo y recursos en cosas que el usuario muy probablemente ignore después de haber visto una vez. Por ejemplo, no gastes mucho tiempo en una animación para la introducción, mejor dedícalo a mejorar los aspectos centrales del juego. PRUEBA PRONTO Y SEGUIDO Consigue que tu juego sea probado por personas desconocidas que pertenecen a tu audiencia objetivo, y hazlo a distintos intervalos durante el desarrollo de tu juego. Es de gran ayuda poder observar a estas personas jugar el juego por primera vez, sin instrucciones. No estés hablando con ellos o explicándoles durante el juego, espera a que hayan terminado.
CONCLUSIÓN Crear juegos casuales es una posibilidad con pocas barreras de entrada y buenas oportunidades de negocio. Esto ha atraído a millones de desarrolladores de todo el mundo y ha llenado los app stores de juegos, lo cual puede hacer parecer que este segmento ya esté saturado y no haya espacio para competir. Sin embargo, el potencial todavía es muy grande, y si haces bien las cosas tendrás buenas oportunidades. Siento que los juegos casuales es un espacio donde Latinoamérica tiene mucho que aportar. Si la industria de TI en Israel aprovechó la fortaleza de su gente en matemáticas y algoritmia para convertirse en líderes en aspectos de seguridad y encripción, mientras que India aprovechó sus decenas de millones de ingenieros que hablan inglés, ¿por qué no en Latinoamérica podríamos aprovechar nuestras ocurrencias y espontaneidad para convertirnos en líderes en el espacio de juegos casuales?
Referencias [1] “Factbox: A look at the $65 billion video games industry”. Reuters, 06/2011. http://swgu.ru/sg36r1 [2] Z. Street. “How large is the Online and Mobile Game Market?” GamesBrief,
MANTENLO SENCILLO Asegúrate de que el juego sea relativamente sencillo de aprender a jugar, pero que también sea un reto convertirse en experto. Las instrucciones necesarias deben ser mínimas, tal vez unas cuantas oraciones a lo mucho. 19
12/2011. http://swgu.ru/sg36r2 [3] T. Higgins. “Casual Games as a Business”. http://swgu.ru/sg36r3 [4] The Rise of the Mobile Gaming Industry (Infographic). Business degree, 04/2012. http://swgu.ru/sg36r4
Software Guru
Variedad de modelos de negocio. Otra característica atractiva de los juegos casuales es que ofrecen distintos modelos de negocio, entre ellos: • Cobro por uso. Este es el modelo tradicional, donde el usuario paga cierta cantidad de dinero para descargar y utilizar un juego. Vale la pena notar que los juegos son la categoría de apps móviles en que los usuarios tienen mayor disponibilidad a pagar por su uso (comparado con lectores de noticias por ejemplo, donde pocos usuarios están dispuestos a pagar por usarlas). • Publicidad. Poner anuncios dentro de los juegos puede generar buenos ingresos. Por ejemplo, Angry Birds genera mensualmente ingresos por 6 millones de dólares por concepto de ventas de publicidad. Debo mencionar, que al igual que en el caso de publicidad en sitios web, este tipo de modelo de negocio solo es viable para los juegos más populares, con millones de usuarios. • Freemium. El modelo freemium consiste en ofrecer una versión gratuita de un juego para “enganchar” a los usuarios, y ofrecer otra versión de paga con capacidades adicionales (más niveles, posibilidades de personalización, etcétera). • Bienes virtuales. Otra variante del modelo freemium es que los usuarios realicen compras dentro del juego (in-app purchase) para adquirir bienes virtuales que pueden utilizar dentro de un juego para mejorar su desempeño. FarmVille es posiblemente el juego más conocido de este tipo.
HAZLO INTUITIVO La interfaz de usuario y controles deben ser lo más estandarizadas posibles. No impongas una curva de aprendizaje a tus usuarios porque reduces las posibilidades de que lo disfruten. PREMIA A TUS JUGADORES Mantén a tus jugadores interesados y envueltos en la experiencia de juego. Por ejemplo, en un juego de acción puedes ofrecer una nueva arma o poder especial cada 30 segundos durante los primeros minutos, y posteriormente reduce la frecuencia de esas ofertas.
www.sg.com.mx |
Potencial de ingresos. Parece apenas ayer que el segmento de juegos casuales era el patito feo de la industria de videojuegos, eclipsado por el mercado multi-billonario de los juegos para consolas. Pero en poco más de dos años (considero 2009-2010 el punto de quiebre) el mercado de juegos casuales ha tenido un crecimiento fenomenal y ha captado gran atención, posiblemente más que el mercado de consolas. Comparto aquí algunos números para darnos idea del tamaño y potencial de este mercado: • El mercado global de juegos móviles y sociales suma cerca de 15 billones de dólares en ventas anuales y está creciendo a tasas cercanas al 20%. Se espera que para el 2016 este mercado sea mayor que el de juegos de consola (y con costos menores). • La empresa de juegos sociales Zynga, reportó ingresos por 311 millones de dólares tan solo en el último trimestre del 2011 (más de 100 millones de dólares al mes). Cerca del 60% de estos ingresos proviene tan solo de 3 juegos: FarmVille, CityVille y FrontierVille. • Rovio, el estudio que creó Angry Birds, fue valuado en agosto del 2011 en 1.2 billones de dólares, y en febrero de este año recibió una oferta por parte de Zynga para ser adquirido por 2.25 billones de dólares (oferta que rechazaron).
DESARROLLO DE
VIDEOJUEGOS
SOCIALES Y MÓVILES ›› Por Milko Madariaga D.
En los últimos años, las redes sociales han propiciado un espacio para el desarrollo de los llamados “videojuegos sociales”. Estos juegos digitales tienen la particularidad de integrar las distintas capacidades de comunicación de la red social en que son ejecutados, como la mensajería a través de chats, envío de invitaciones y uso del contenido que los propios usuarios han generado en la red.
A su vez, la masificación del uso de dispositivos móviles ha permitido incorporar nuevos elementos que expanden aún más las características de sociabilización en este tipo de aplicaciones, tales como la geolocalización, el compartir información en tiempo real usando una cámara o micrófono, así como también la capacidad de estar conectado en todo momento a través de redes inalámbricas. Todos estos elementos permiten establecer una interacción más rica y síncrona entre los usuarios participantes.
CONSIDERACIONES
.BIO Milko Madariaga es Ingeniero en Computación y Magíster en Ciencias de la Universidad de Chile. Actualmente se desempeña como CTO de Syrenaica Inc., empresa chilena desarrolladora de videojuegos sociales y móviles. mmadaria@syrenaica.com
La creación de un videojuego social conlleva diferentes desafíos de carácter técnico, ya que se espera que este tipo de aplicaciones permitan que muchos usuarios puedan conectarse a ellas para interactuar entre sí, debiendo soportar diferentes configuraciones de software (sistemas operativos, browsers) y hardware (PC, dispositivos móviles). Dado esto, el diseño de un videojuego social debe considerar aspectos relevantes como: • Escalabilidad: hacer que el juego pueda funcionar correctamente cuando aumenta o disminuye la cantidad de jugadores. • Concurrencia: soportar adecuadamente que varios usuarios interactúen simultáneamente en la aplicación. • Plataforma(s) de operación: construir el juego de modo que pueda funcionar en diversas plataformas y diferentes redes sociales. • Seguridad: proteger la integridad de la plataforma y los datos de los jugadores. 20
• Monitoreo y registro de información: verificar la salud de la plataforma del juego y generar bitácoras con información relevante sobre las acciones de los jugadores y “logs” del sistema.
ARQUITECTURA Para cumplir con las consideraciones mencionadas, es deseable separar los componentes del juego en diversos módulos según su tipo de responsabilidades y acciones a realizar. En la Figura 1 se presenta un ejemplo de arquitectura para un videojuego social. A continuación explico los distintos componentes: • Game Front-end. Es la capa de presentación del juego que se ejecuta dentro del contexto de una red social. Interactúa con el usuario, es responsable de manejar los elementos multimediales (gráficos, audio), los dispositivos de entrada de datos (teclado, mouse, pantalla táctil) y se comunica con los servicios del back-end. • Social network integration. Módulo encargado de interactuar con la API de una o más redes sociales. Permite que el front-end del juego pueda acceder a los datos y funcionalides sociales que provee cada red social (listas de amigos, envío de invitaciones, etc.) y acceder a los medios de pago integrados (ej: Facebook credits). • Game services. Corresponde a la capa de servicios del juego, es usada por el Front-end para validar, persistir y recuperar la información relacionada con la cuenta de cada jugador. • Storage. Capa encargada de proveer mecanismos para guardar y recuperar la información y estado de cada uno de los usuarios que participan en el juego.
PRINCIPAL DESARROLLO DE VIDEOJUEGOS SOCIALES Y MÓVILES
FRONT END. Actualmente, la mayoría de los juegos sociales usa Adobe Flash en su front-end, lo que permite que éstos sean ejecutados principalmente en PCs y navegadores web a través de un plugin. Sin embargo, la gradual adopción en los últimos años de la especificación HTML5 por parte de grandes compañías como Google, Apple y Microsoft, ha permitido que tanto computadores de escritorios como smartphones y tablets puedan hacer uso de contenido multimedia usando un browser, sin necesidad de instalar un plugin adicional. El desarrollar aplicaciones usando HTML5 consiste en usar el lenguaje Javascript para manipular los objetos provistos por esta especificación, en particular: • Canvas. Objeto que permite renderizar figuras geométricas, y desplegar elementos gráficos basados en bitmaps (ej: imágenes PNG, JPG). • Audio. Permite ejecutar sonidos. Los formatos permitidos varían según plataforma de ejecución (ej: browser). • WebSocket. Tecnología que permite establecer comunicación bidireccional continua de datos entre un cliente y un servidor usando un socket (protocolo TCP). Actualmente existen diferentes motores de juegos que pueden ser usados para implementar un front-end usando HTML5, tales como ImpactJS y MelonJS. Éstos proveen herramientas de apoyo (ej: editor de niveles) y permiten abstraer en parte los problemas de compatibilidad entre los diversos navegadores. Junto a esto, existen herramientas que optimizan la ejecución de aplicaciones HTML5 en dispositivos móviles (Android, iOS), proveyendo acceso a funcionalidades nativas de cada dispositivo (cámaras, acelerómetro, etc.). Algunas de éstas son PhoneGap, TriggerIO y AppMobi XDK, las cuales ofrecen funcionalidades gratis y pagadas para generar archivos distribuibles en mercados como Apple Store y Google Play. 21
CONCLUSIÓN En este artículo hemos echado un vistazo de alto nivel a las distintas consideraciones y aspectos técnicos que hay que tener en cuenta al construir un juego social. Espero que te sea de ayuda en la construcción de tu próximo juego.
Software Guru
Figura 1. Ejemplo de arquitectura
BACK-END La capa de servicios del juego puede ser implementada usando lenguajes del lado del servidor (Java, PHP, C#) y pueden ser expuestos a través de protocolos binarios de comunicación (ej: AMF de Adobe Systems) o basados en HTTP (REST, SOAP). En la actualidad, destaca el uso del servidor Node.js, el cual permite desarrollar aplicaciones altamente escalables usando Javascript, empleando una arquitectura orientada a eventos. Además, cuenta con la capacidad de extender su funcionalidad base mediante módulos que se le pueden ir incorporando. Junto a esto, para permitir escalabilidad del back-end, alta disponibilidad y una gran capacidad de almacenamiento puede hacerse uso de tecnología basada en Cloud Computing. En la modalidad PaaS (Platform as a Service) puede usarse una plataforma que ya viene predeterminada con hardware, redes, sistema operativo y servidor de aplicaciones. Tal es el caso de Microsoft Windows Azure, el cual provee un sistema operativo Windows Server el cual ofrece almacenamiento de tipo relacional (SQL Azure) y no relacional (table storage, blobs, queues). A su vez, en la modalidad IaaS (Infrastructure as a Service) pueden realizarse modificaciones al sistema operativo, servidor de aplicaciones y otras configuraciones de infraestructura. Un ejemplo de esto es la plataforma Amazon Web Services, la cual ofrece máquinas virtuales de Linux, Windows y permite establecer el servidor de aplicaciones a usar (ej: Tomcat, Jetty). A nivel de persistencia, los grandes volúmenes a manipular por una aplicación social pueden ser controlados usando mecanismos de almacenamiento distribuido y no relacional, tales como MongoDB (base de datos de tipo NoSQL) y Table Storage de Windows Azure. A su vez, existen soluciones complementarias como Memcached, la cual permite agregar una capa de caché distribuida que almacena y recupera objetos serializados en memoria RAM, disminuyendo así el acceso a los repositorios persistentes cuyo acceso es generalmente más lento y caro. Con respecto a la capa de integración a redes sociales, cada una de estas redes provee un conjunto de APIs en distintos lenguajes para poder interactuar desde aplicaciones hechas por terceros. Facebook provee una SDK oficial para programar en Javascript, PHP y dispositivos móviles (iOS y Android). Junto a esto, redes sociales como Orkut y Hi5 utilizan la API de la especificación OpenSocial para acceder a sus datos y funcionalidades mediante Javascript. Finalmente, la capa de análisis de datos puede implementarse usando el servicio Google Analytics, el cual permite definir una serie de métricas y categorías que se van nutriendo de información a través de llamadas HTTP enviadas desde el front-end o back-end. En caso que se desee una solución más específica para capturar eventos de redes sociales existe el servicio ofrecido por Kontagent, el cual permite registrar invitaciones, publicaciones y datos demográficos entre otros.
www.sg.com.mx |
• Caching system. Corresponde a una capa de caché o almacenamiento volátil de datos, la cual permite reducir los accesos más costosos al storage y acelerar la recuperación de datos del juego que no cambian frecuentemente. • Tracking service (analytics). Se refiere a una capa de seguimiento de acciones, la cual permite registrar el comportamiento de los usuarios en base a eventos disparados durante el juego tales como el envío de invitaciones, compras de ítems virtuales, etc.
HERRAMIENTAS PARA CREAR JUEGOS ››Por Daniel Ramos
Los motores de juego (game engine) son herramientas para facilitar y acelerar la creación de videojuegos. Dichos motores típicamente proveen un framework para el desarrollo de juegos que incluye componentes que se encargan de resolver aspectos tales como rendering de gráficas, audio, animación, inteligencia artificial, física, localización, y habilitación de red, entre los más comunes. Hoy en día existe una gran variedad de motores para crear juegos, con distintas capacidades, enfoques y modelos de licenciamiento. En este artículo brindo un panorama de los motores y tecnologías que considero más relevantes.
UNITY Unity es un ambiente de desarrollo integrado (IDE) para la creación de juegos 3D, video y otros contenidos interactivos tales como visualizaciones arquitectónicas en tiempo real. Los juegos producidos por Unity se pueden ejecutar en gran variedad de consolas y sistemas operativos tales como Windows, Mac, Xbox 360, PlayStation 3, Wii, iPhone/iPad, Android, Chrome, Flash y próximamente Linux. Unity consta de dos elementos principales: un editor para el desarrollo/diseño de contenidos y un motor de juego. Ambos están estrechamente integrados, lo cual permite que desde el mismo editor se puedan realizar acciones que invocan al motor de juego. Un ejemplo de esto es que desde el mismo editor puedes visualizar en vivo tus creaciones. El editor de Unity también cuenta con un profiler que provee estadísticas sobre los distintos aspectos relacionados con la construcción del juego. En general, podemos decir que Unity es un ambiente de desarrollo de juegos que destaca por soportar múltiples plataformas para ejecutar los juegos creados, así como por la facilidad de uso y productividad de su editor. Esto lo ha convertido en una herramienta muy popular en los últimos años. Unity está disponible en distintas versiones y precios. Aunque existe una versión gratuita, esta no contiene toda la funcionalidad de la edición Pro, además de que los juegos publicados tienen un sello de agua o despliegan un splashscreen de Unity. Unity Pro no contiene estas limitaciones y su precio es de $1,500 USD. Sin embargo ahí no termina la cosa porque dependiendo de la plataforma para la que deseas desarrollar/desplegar puedes requerir complementos adicionales. Por ejemplo, para crear juegos para iPhone/iPad necesitas el complemento para iOS, que a su vez está disponible en dos ediciones: básica ($400 USD) y Pro ($1,500 USD). Entonces, una licencia de Unity Pro + el add-on de iOS Pro saldría en $3,000 USD.
UNREAL ENGINE / UDK El Unreal Engine (actualmente en su 3ra generación) es un motor para juegos creado por Epic Games, y que ha sido utilizado para construir 22
varios de los videojuegos de consola más populares en el mercado , tales como la serie Gears of War. Durante muchos años, el Unreal Engine solo estuvo disponible para estudios de videojuegos profesionales, sin embargo en noviembre del 2009 Epic liberó el Unreal Development Kit (UDK), que es una versión del Unreal Engine disponible al público en general con el que se puede crear juegos para distintas plataformas incluyendo consolas, PC, Mac, Android, iOS y Playstation Vita. Este motor destaca por sus capacidades avanzadas para el rendering de gráficas, incluyendo técnicas avanzadas como iluminación por pixel, sombras dinámicas y high dynamic range rendering (HDRR). También cuenta con su propio ambiente de edición (Unreal Editor). Los scripts se crean en un lenguaje de programación propietario (UnrealScript) y son conectados entre sí usando el editor visual Unreal Kismet. Uno de los inconvenientes de UDK es que solo está disponible para Windows. Para fines educativos o sin lucro, el uso del UDK es gratuito. En el caso de empresas que planean crear juegos comerciales con UDK, requieren firmar un contrato de licencia comercial en el que hacen un pago inicial de 99 dólares y se comprometen a que en caso de que obtengan ganancias superiores a los 50 mil dólares darán una comisión del 25% de sus ingresos a Epic.
COCOS 2D Cocos2d es un framework open source para crear juegos 2D. La versión original de cocos2d fue programada en Python, pero existen diversos ports a otros lenguajes y plataformas. El más conocido de estos es cocos2d-iphone, escrito en Objective-C para crear juegos para iOS y Mac OSX. También existen ports de Cocos2d para Android, HTML5 y XNA entre otros. Entre las ventajas de cocos2d destacan las siguientes: • Fácil de usar. Su API es sencillo e incluye una gran variedad de ejemplos. Provee abstracciones de alto nivel para las tareas mas comunes. • Rápido. Cocos2d utiliza las mejores prácticas de OpenGL ES y estructuras de datos optimizadas. • Es software libre. Cocos2d está bajo licencia MIT, una licencia muy flexible que permite utilizarlo tanto para hacer juegos de código abierto como cerrado. Además puedes extenderlo e integrarlo con bibliotecas de terceros. • Comunidad activa. La comunidad de cocos2d es grande y activa, en los foros típicamente puedes obtener respuestas rápidamente.
STAGE 3D Stage3D como tal no es un motor de juegos, sino que es un modelo para rendering de gráficos 2D y 3D que se puede usar en aplicaciones Flash y AIR. Lo incluyo aquí porque si eres un desarrollador Flash y te interesa crear juegos, considero que es muy buena opción que utilices las mismas herramientas que ya usas para construir aplicaciones Flash/AIR, y aproveches las capacidades de Stage 3D para crear juegos con rendering de gráficos acelerados por hardware. Las APIs de Stage3D permiten realizar aceleración de gráficos por GPU de forma sencilla y en múltiples dispositivos (computadoras personales, dispositivos móviles y TVs). A diferencia de las plataformas de gráficos 3D de bajo nivel como Open GL o Direct X que típicamente requieren conocimiento del hardware específico a utilizarse, Stage 3D está en un nivel de abstracción mayor, independiente del hardware o dispositivo, por lo que su uso es más sencillo y amigable. El inconveniente es que Stage 3D no
aprovecha las capacidades más avanzadas de los GPUs más modernos. Por ejemplo, Stage 3D se basa en la versión 2.0 del Shader Model (un estándar para sombreado de vértices y fragmentos), pero ya hay tarjetas que soportan la versión 4.0. Así que si tu requerimiento es aprovechar las capacidades más avanzadas de los GPUs más poderosos, posiblemente Stage 3D no sea para tí. Stage 3D como tal no tiene un costo de uso. Sin embargo, se requieren usar las herramientas de Adobe para construcción de aplicaciones Flash o Air. Adicionalmente, Stage 3D forma parte de las denominadas “premium features” de Flash Player 11.2 y AIR 3.2, y Adobe recientemente anunció que las apps publicadas después del 1 de agosto de 2012 que usen estos premium features y obtengan ingresos mayores a los 50 mil dólares, requieren pagar una comisión del 9% a Adobe por el uso de estas capacidades avanzadas. El uso de estas capacidades en Adobe AIR, incluso para las aplicaciones móviles para iOS y Android, no tendrá ningún costo.
.BIO Daniel Ramos (@dannygeek) es consultor de tecnología con más de 10 años de experiencia en IT, desarrollando en multiples plataformas como Java, Flash y .Net. Ha participado como conferencista a nivel internacional, y actualmente es Game Engineer en RAKU, empresa especializada en el desarrollo de aplicaciones basadas en iOS.
CONCLUSIONES En este artículo he mostrado lo que considero las herramientas más recomendables para crear juegos. En algunos casos, los precios o modelos de licenciamiento pueden parecer altos, pero la realidad es que el uso de un buen motor sí contribuye enormemente a disminuir el esfuerzo requerido para crear un juego con gran calidad. Es una relación ganar/ganar. 23
Referencias [1] Unity. http://unity3d.com [2] Cocos2D for iPhone. http://www. cocos2d-iphone.org [3] UDK. http://udk.com [4] M. Scabia. “How Stage 3D Works”. http://swgu.ru/sg36r6
www.sg.com.mx |
Cocos2d para iOS utiliza las herramientas y lenguajes de esta plataforma (Objective-C, XCode), lo cual puede ser una ventaja si ya estás familiarizado con ellos o una desventaja si no te son familiares. Otra desventaja de Cocos2d es que a diferencia de las herramientas comerciales como Unity o Unreal, no posee un editor gráfico para animaciones o escenas.
Software Guru
PRINCIPAL HERRAMIENTAS PARA CREAR JUEGOS
PRINCIPAL PLATAFORMAS DE GAMIFICACIÓN
Nota del editor: La gamificación (gamification) consiste en la aplicación de técnicas y mecánicas de juego a contextos que no son juegos. Típicamente, la gamificación se aplica en procesos y aplicaciones de software para motivar a los usuarios a adoptar dichos procesos o incentivar el uso repetido de un software. Si alguna vez has usado una aplicación o sitio web donde los usuarios compitan, o se otorguen premios/reconocimientos en base a logros, entonces ya estás familiarizado con la gamificación. En el siguiente artículo, David Bonilla nos recomienda 7 platafor-
PLATAFORMAS DE
GAMIFICACIÓN ››Por David Bonilla
La gamificación es una técnica para incentivar determinados comportamientos mediante la aplicación de mecánicas de juego. Para conseguirlo, lo primero que hay que hacer es identificar los procesos o actividades que queremos incentivar (aumentar las ventas en un equipo comercial, mejorar la atención al cliente en un call center, disminuir el absentismo escolar…) y, después, aplicar las mecánicas de juego (niveles, insignias o badges, clasificaciones…) más adecuadas para aumentar la motivación intrínseca de nuestra audiencia objetiva.
mas que facilitan la incorporación de capacidades de gamificación en nuestras aplicaciones de software. David publicó esta nota originalmente en su blog (http://bonillaware.com/7-plataformas-degamificacion) y lo hemos publicado aquí con su permiso.
Para ayudarnos con esa aplicación práctica existen una serie de plataformas de gamificación que, básicamente, monitorean de forma automática y continuada los procesos gamificados e implementan las mecánicas de juego. A continuación, presento las que yo considero las plataformas más interesantes para gamificación existentes en el mercado: Badgeville. Proporciona un motor que permite gamificar a partir de objetivos y recompensas personalizadas. Incluye un generador de widgets, APIs, SDK para móviles, conectores con Omniture, Yammer y muchas más aplicaciones… la plataforma de referencia hoy en día. http://badgeville.com Bunchball. Una de las primeras aplicaciones disponibles. Su solución Nitro fue lanzada en 2007 y se ha convertido en una de las mejores soluciones para los equipos de ventas que utilizan Salesforce. Su web está llena de recursos interesantes sobre la aplicación de gamificación en distintos negocios. http://www.bunchball.com
.BIO David Bonilla (@david_bonilla)
a Tecnologías de la Información. Aunque David radica en Madrid, España, colabora con startups tecnológicos de distintas regiones. http://bonillaware.com
Stopped.at. Una plataforma peculiar. Se autodefine como “el Foursquare de las webs“. Incentiva a la audiencia de tu web a hacer check-in cuando te visiten y compartirlo a través de sus redes sociales. A cambio, podrán obtener recompensas en base al tráfico que generen. Algunas tiendas ofrecen gastos de envío gratuitos a cambio de los check-ins de los clientes. http://stopped.at Kiip. Kiip permite gamificar… ¡Lo que ya está gamificado! Es un sistema para incluir recompensas reales en videojuegos. ¿Te imaginas que, al derrotar al jefe final, rescatar a la princesa o pasar de nivel, ganaras un café gratis en Starbucks o un bono de descuento en Sephora? Pues eso es Kiip. Y, además, tienen un programa para ayudar a los desarrolladores de videojuegos indie. http://kiip.me
BigDoor. Es una de las pocas plataformas con precios públicos y una versión gratuita para que puedas implementar en tu página web. Incluye autenticación con Facebook o Twitter y hasta un proceso de onboarding (abordaje) para que tus usuarios aprendan a jugar con el sistema. http://bigdoor.com
Gamify. Una curiosa mezcla de Second Life y Habbo Hotel donde se supone que las marcas pueden incentivar a los usuarios para visitar sus webs o usar sus aplicaciones. Es más un chat con esteroides que una verdadera plataforma de gamificación. Lo he incluido como ejemplo de alternativa a los aburridos asistentes virtuales que incluyen muchas webs. http://gamify.com
Gigya. Gigya construye productos para integrar aplicaciones corporativas con más de 25 Redes Sociales y, además, tiene un producto de gamificación. Es la plataforma que ofrece una mayor posibilidad de integración (APIs REST, implementación en servidor con .NET, JAVA y PHP,
Échenle un vistazo a Bokzuy (http://boksuy.com), una aplicación para asignar puntos buenos o malos a tus colegas de trabajo en base a las actividades de la semana. Cuenta con una API REST así que podrías incorporarla en tus propias aplicaciones.
es consultor independiente de marketing estratégico aplicado
SDKs para iOS, Android y Flash) y documentación técnica de referencia. http://gigya.com
24
OTROS EJEMPLOS
PRINCIPAL FIESTA DIGITAL
FIESTA DIGITAL
UNA EXPERIENCIA FÍSICO-VIRTUAL ››Por José Eduardo Terán
En 1993 John Carmack y su compañero John Romero lograron conectar en red dos computadoras que ejecutaban de forma sincronizada un videojuego. “Imagina conectar dos, tres o cuatro personas, que estén jugando simultáneamente de manera cooperativa o en contra …” dijo Romero. Fue así que nació el videojuego Doom y se dio inicio a una actividad que desde entonces ha reunido a millones de jugadores en todo el mundo: las fiestas LAN, o LAN parties por su nombre en inglés.
• Juegos de primera persona. Es el más común. Los jugadores toman el rol de un avatar digital y lo utilizan para interactuar con otros desde una perspectiva de primera persona (es decir que lo que se despliega en pantalla es como si estuvieramos viendo a través de los ojos de nuestro personaje). • Juegos de estrategia. Durante el encuentro, cada jugador toma el rol de jefe o dios de una ciudad y, de acuerdo a sus decisiones, esa ciudad podrá prosperar y enfrentarse a otras para dominar el escenario completo. • Juegos de rol. Bien sean aliados o enemigos, cada jugador personifica a un avatar dentro de un mundo virtual con atributos que mejoran durante el transcurso del juego. El objetivo es realizar campañas o misiones en conjunto y obtener recompensas por las hazañas realizadas.
TECNOLOGÍA Conforme han pasado los años, este tipo de juegos también han ido incorporando avances tecnológicos. Por ejemplo, existen bots que son jugadores controlados por el videojuego y que poseen inteligencia artificial avanzada que simula las acciones que pudiera realizar un jugador real. Con el paso del tiempo, la tecnología usada en este jugador con mente propia ha avanzado a tal grado, que ya es posible la comunicación y generación de estrategias por parte de un grupo de bots. Otro caso interesante es el de los juegos de rol multijugador masivos en línea (MMORPG por
MÁS ALLÁ DE UNA FIESTA Pero la fiesta LAN es más que una reunión virtual, es también una experiencia social. Las personas que las practican aprovechan la oportunidad para reunirse con sus amigos, platicar física y convivir en un ambiente de mucha cooperatividad. Discusiones tecnológicas, micro-conferencias y talleres son también algunas de las actividades realizadas durante las sesiones. Además de lo anterior, existen grupos que aprovechan la fiesta para desarrollar videojuegos en conjunto. Como dura un par de días, utilizan tecnologías que apoyan al desarrollador a crear sus videojuegos de manera más rápida y efectiva. Herramientas como el UDK, Unity3D y Source son las más solicitadas, al ser motores que contienen gran parte de la programación necesaria en un videojuego, haciendo que le dediquen más tiempo a la creación de arte y mecánicas de juego. No cabe la menor duda que la convivencia social es una actividad indispensable del ser humano, y qué mejor que hacerla en un ambiente de mucha participación y entretenimiento. Pero si además de actividades lúdicas, la llevamos más allá con temas de desarrollo educativo y productivo, estaríamos potencializando enormemente la producción de nuevas tecnologías en nuestro país. Aprovechemos las fiestas LAN y convirtámoslas en una diversión productiva. 25
Software Guru
TIPOS DE JUEGO La variedad de juegos es muy extensa y cada uno genera una experiencia distinta en el jugador. Esto es porque ellos deberán adaptarse a las circunstancias artísticas, tecnológicas y culturales que presenta cada juego. Dentro de toda la gama, los tres géneros más demandados son:
sus siglas en inglés.) En este caso, cada jugador se conecta remotamente a un servidor y participa en un mundo virtual donde algunas leyes, acciones y circunstancias se asemejan al mundo real: el paso del tiempo, efectos climatológicos, transporte público e incluso una economía basada en unidad monetaria o trueque. Las consolas de videojuego caseras también han ido incorporando capacidades surgidas de las LAN parties. Es así que las consolas modernas pueden interconectarse remotamente a través de Internet, y los usuarios tienen un perfil público donde exponen trofeos obtenidos en sus juegos y pueden retar o colaborar con jugadores de todo el mundo aunque no los conozcan.
www.sg.com.mx |
Una fiesta LAN es una reunión casual de dos o más videojugadores que conviven física y virtualmente jugando videojuegos conectados en red.
.BIO José Eduardo Terán (@jeteran) es líder, emprendedor y promotor de nuevas oportunidades académicas y empresariales en el campo de la producción de videojuegos a través de la creación de congresos, conferencias y planes de estudio a nivel superior en Latinoamérica. Actualmente se dedica al estudio y producción de videojuegos de manera independiente y en sinergia con empresas de esta industria. http://www.jeteran.com
PROGRAMANDO PARA
EL GPU CON CUDA ›› Por Hector Cuesta Arvizu y Jorge Esteban Zaragoza
Las Unidades de Procesamiento Grafico (GPUs) incluidas en las tarjetas de video modernas son procesadores de varios núcleos cuyo principal objetivo es realizar cálculos para el rendering de gráficas 3D en tiempo real.
.BIO Héctor Cuesta Arvizu (@hmcuesta) es Lic. en Informática y actualmente cursa la maestría en ciencias de la computación en la UAEM Texcoco. Adicionalmente se desempeña como instructor de TI para Nyce en el área de base de datos e ingeniería de software.
Jorge Esteban Zaragoza Salazar (@TheSuperJez) es Ingeniero en Sistemas Computacionales. Es apasionado del desarrollo de software y se especializa en el desarrollado de aplicaciones Web de alto rendimiento.
Al desarrollar videojuegos lo más común es utilizar motores que nos proveen frameworks y APIs que facilitan la interacción con la tarjeta de video para el rendering de gráficos, y por lo tanto no es necesario que programemos directamente para el GPU. Sin embargo, como buen lector de SG, tal vez tengas curiosidad de saber cómo podrías programar directamente hacia el GPU. Esto te permitiría crear por ejemplo un motor de gráficos de muy alto desempeño. Más allá del rendering de gráficos, el procesamiento paralelo con GPU puede aplicarse para resolver todo tipo de problemas de cómputo. A fin de cuentas, al igual que un CPU, un GPU es una unidad de procesamiento que recibe datos e instrucciones y las procesa. La diferencia es que la arquitectura de un GPU se presta mucho más al procesamiento paralelo que la de un CPU tradicional. Mientras que un CPU está formado por algunos cuantos núcleos (cores) con mucha memoria cache que pueden manejar unos cuantos hilos (threads) al mismo tiempo, un GPU típicamente está compuesto por cientos de núcleos de procesamiento que pueden manejar miles de hilos de manera simultánea. Gracias a esto, el procesamiento paralelo de datos usando GPUs llega a ser mucho más rápido, económico y con menos gasto de energía que si usaramos CPUs. Es 26
así que el cómputo por GPU ya se aplica en algunas organizaciones para acelerar cargas de procesamiento en áreas tales como el modelado financiero, investigación científica y exploración de gas y petróleo. En este artículo veremos a grandes rasgos cómo construir programas que interactúen directamente con el GPU. Para ello utilizaremos CUDA (Compute Unified Device Architecture), que es una tecnología que incorporan las tarjetas de video N-Vidia. CUDA ofrece un API en C, que es el que usaremos. Vale la pena notar que CUDA no es la única opción para programar hacia el GPU, existen otras como OpenCL y DirectCompute.
FUNCIONAMIENTO DE CUDA En la Figura 1 podemos ver cómo está organizado internamente un proceso en CUDA en base a los elementos: kernel, grid, block y thread. Un kernel es una función que al ejecutarse lo hará en N distintos hilos en lugar de en forma secuencial. La ejecución de un kernel en múltiples threads (hilos) es organizada “espacial y temporalmente” como un grid (malla) de bloques de threads. Esta organización tiene que ver con la estructura en multiprocesadores del array de procesadores. Cada bloque es
PRINCIPAL PROGRAMANDO PARA EL GPU CON CUDA
atendido por un multiprocesador, así que todos los threads de un bloque son ejecutados en el mismo multiprocesador. Gracias a esto, los threads de un mismo bloque pueden sincronizar su ejecución y compartir datos de forma eficiente usando memoria local de baja latencia. En cambio, los threads de bloques distintos no pueden cooperar (o al menos no es trivial lograrlo).
INSTALACIÓN DE LAS HERRAMIENTAS Para usar CUDA debes descargar e instalar: los drivers para la tarjeta de video (tu tarjeta debe soportar CUDA), el toolkit de CUDA que contiene los elementos necesarios para poder compilar, y el GPU Computing SDK que contiene proyectos de ejemplo. Todo esto está disponible para plataformas Windows, Linux y Mac, y se puede descargar en http://developer. nvidia.com/cuda-downloads
Figura 1. Arquitectura CUDA
Software Guru
Ejemplo de Algoritmo Paralelizado El listado 1 muestra un código de tipo “Hola Mundo” usando CUDA en C
#include “cuPrintf.cu” #include <cuda.h>
www.sg.com.mx |
#include <stdio.h> // funcion kernel para mostrar thread ID __global__ void ejemploImprime() { int idx = blockDim.x*blockIdx.x + threadIdx.x
Figura 2. Ejecución de Hola Mundo CUDA
cuPrintf(“Hola mundo, %d \n”, idx); }
CONCLUSIÓN
int main() { cudaPrintfInit(); // invocamos función kernel con 5 grids y 2 bloques. ejemploImprime<<<5,2>>>(); //Mostrar el saludo del kernel cudaPrintfDisplay(); cudaPrintfEnd(); return 0; } Listado 1. Hola Mundo usando CUDA
Al ejecutar el código del listado 1 obtendremos un resultado como el de la figura 2.
En este artículo echamos un vistazo a cómo hacer programación para GPU con CUDA. Si te interesa desarrollar soluciones que puedan analizar cantidades masivas de datos en un tiempo razonable y con un costo de hardware relativamente bajo, una excelente opción es hacer un cluster de supercómputo utilizando GPUs de consolas de videojuego. Debemos tener en cuenta que no todo es paralelizable, por lo que durante el diseño de nuestro software debemos identificar qué partes de nuestro algoritmo vamos a optimizar, así como organizar la memoria de tal forma que los accesos paralelos sean óptimos y con esto evitar cuellos de botella (race condition). 27
Referencias [1] NVIDIA Developer Zone. http://developer.nvidia.com [2] http://forums.nvidia.com/index. php?showtopic=106638 [3] Kirk D.B., Hwu W., ”Programing massively parallel processors”, Elsevier, 2010.
.PRÁCTICAS Procesos
Entrega
Ágil Disciplinada
llevando ágil al siguiente nivel
›› Por Scott W. Ambler y Mark Lines
U
n número creciente de organizaciones están adoptando métodos ágiles y para ello una estrategia común es comenzar con métodos sencillos como Scrum en unos cuantos proyectos. Conforme van teniendo éxito en dichos proyectos, se interesan en llevar Ágil al siguiente nivel. Este artículo describe cómo se ve ese siguiente nivel. Disciplined Agile Delivery (Entrega Disciplinada de Agilidad), o DAD, es un framework de procesos que brinda una estrategia completa y coherente de cómo funciona en la práctica la entrega ágil de soluciones. DAD es un framework híbrido, centrado en las personas y orientado al aprendizaje. Utiliza una estrategia dirigida por metas y un ciclo de vida dirigido por riesgo y valor. Es escalable y está diseñado para satisfacer contextos empresariales complejos.
Características de DAD
Revisemos qué significa cada una de estas características: Centrado en las personas (people first) En DAD se fomentan los equipos multidisciplinarios conformados por personas con habilidades distintas y cruzadas. Los miembros de los equipos deben tener múltiples habilidades y realizar actividades en distintas disciplinas fuera de su especialidad. Orientado al aprendizaje Existen tres aspectos clave que deben ser atendidos por un ambiente de aprendizaje. El primero es el aprendizaje del dominio: ¿cómo exploras e identificas las necesidades del cliente?, ¿cómo fomentas que el equipo obtenga este aprendizaje? El segundo aspecto se enfoca en el aprendizaje para mejorar el proceso a todos los niveles: individual, de equipo y de organización. El tercer aspecto es el aprendizaje técnico que se enfoca en entender cómo trabajar de forma efectiva con las herramientas y tecnologías utilizadas para crear la solución. 28
Agilidad El framework DAD se adhiere y amplifica los valores y principios del Manifiesto Ágil. Híbrido DAD es un framework híbrido porque adopta y personaliza técnicas de métodos ágiles existentes tales como Scrum, Extreme Programming (XP), Agile Data (AD), Agile Modeling (AM), Unified Process (UP) y Kanban, por nombrar algunos. DAD es un framework ágil de segunda generación, que aprende y aprovecha los frameworks ágiles anteriores. Enfocado en soluciones DAD mueve el enfoque de tan solo producir software, a proveer soluciones que aportan verdadero valor de negocio, considerando las restricciones económicas, culturales y técnicas. Sí, por supuesto que el software es importante, pero el despliegue exitoso de soluciones de TI típicamente involucra no solo software, sino también adquirir hardware, ajustar procesos de negocio y operativos, e incluso puede impactar la estructura organizacional de los involucrados. Enfocado en la entrega El ciclo de vida básico de DAD, mostrado en la figura 1, considera desde el inicio del proyecto, pasando por la construcción del producto y la liberación de la solución en producción (incluso muestra algunas actividades de gestión de portafolio de proyectos previas a la iniciación del proyecto, así como algunas actividades posteriores a la liberación en producción). Esto difiere de los métodos ágiles de primera generación que típicamente se enfocan en las actividades de construcción del software, ignorando el resto del ciclo de vida necesario para desarrollar e implantar exitosamente una solución, especialmente en un contexto corporativo.
.PRÁCTICAS Procesos
Escalable DAD provee una base escalable para TIs ágiles y es una parte importante de la estrategia de IBM de “agilidad a escala”. Dicha estrategia enfatiza que escalar un proceso tiene que ver con muchos aspectos más allá del tamaño del equipo. Existen muchos otros factores que deben ser considerados al escalar procesos ágiles a nivel organizacional. Entre estos factores están la distribución geográfica del equipo, complejidad (técnica y del dominio), regulaciones que deben ser satisfechas (compliance), estructura organizacional, complejidad organizacional, y disciplina de la empresa. Cada equipo se encontrará en una situación única y debe personalizar su estrategia al contexto en que se encuentra. Por ejemplo, un equipo de siete personas colocalizadas en un ambiente de alta regulación trabajaran de forma distinta a un equipo de cuarenta personas distribuidas geográficamente en un ambiente sin regulación.
Compatible con el contexto empresarial Los equipos ágiles no trabajan en un vacío. Normalmente hay sistemas existentes en producción, que no deberían ser impactados, e idealmente deberían ser aprovechados. También hay otros equipos y proyectos desarrollando soluciones en paralelo, y es deseable que dichos equipos puedan aprovechar lo que está haciendo cada uno. Asimismo, puede haber una visión conjunta de la organización, una visión a la que cada equipo contribuye por medio de las soluciones que desarrolla. Y también debe haber una estrategia de gobernanza (governance), aunque posiblemente no sea obvia para todos los miembros de la organización. Dirigido por riesgo y valor El framework DAD adopta lo que se conoce como un ciclo de 29
www.sg.com.mx |
vida dirigido por riesgo y valor (risk/value lifecycle), que viene a ser una versión ligera de la estrategia propuesta por el Proceso Unificado. Los equipos DAD se enfocan en resolver los principales riesgos del proyecto, tales como: lograr consenso de la visión de la solución a desarrollar y probar su arquitectura en etapas tempranas del ciclo de vida. DAD también incorpora revisiones explícitas de la viabilidad del proyecto, si la funcionalidad provista es suficiente, y si la solución está lista para producción. El que también esté dirigido por valor provoca que en DAD los equipos buscan generar soluciones utilizables periódicamente.
Dirigido por metas Uno de los retos de describir un marco de procesos es que necesitas proveer suficiente información que sirva como guía para ayudar a las personas a entender el marco, pero si se provee demasiada información entonces puede ser tomado como una “receta” y sabemos que eso no es bueno. Para resolver este reto, el framework DAD está dirigido por metas, que se resumen en la figura 2. En mi experiencia, la estrategia dirigida por metas provee la cantidad adecuada de orientación para que el equipo comprenda el proceso, al mismo tiempo que es suficiéntemente flexible para que puedan personalizarlo al contexto correspondiente.
Software Guru
Figura 1. El ciclo de vida básico de DAD
.PRÁCTICAS Procesos
Figura 2. Metas a lo largo de un proyecto DAD
Dirigido por metas
La característica de DAD que los agilistas posiblemente encuentren más intrigante es que es dirigido por metas. La estrategia básica consiste en identificar las metas fundamentas que son aplicables en un punto específico del proyecto, y entonces configurar la estrategia de proceso para cumplir dichas metas de forma que reflejen la situación real del proyecto. Para lograr esto de manera efectiva necesitas entender los asuntos relevantes a cada meta, así como las consecuencias de las decisiones que estás tomando. Aquí es donde DAD provee orientación. Tomemos como ejemplo la meta de identificar los requerimientos iniciales de un sistema, existen distintos asuntos a considerar al configurar tu proceso para cumplir esa meta: ¿qué nivel de detalle buscas capturar (lista de metas, especificación ligera, especificación detallada)?, ¿qué tipos de modelado realizarás (modelo de dominio, modelo de procesos, modelo de uso, modelo de interfaces de usuario)?, ¿qué mecanismos utilizarás para obtener los requerimientos (entrevistas, brain storming, observación de usuarios)?, ¿cómo gestionaras los cambios de requerimientos?, ¿cómo capturarás los requerimientos no funcionales? Aunque identificar los requerimientos iniciales es una tarea clara y concisa, llevarla a cabo de manera adecuada típicamente requiere algo más que tan solo crear unas tarjetas con historias.
Mejora de proceso explícita
A pesar de todo lo que se habla sobre el empirismo -la importancia del aprendizaje- y la necesidad de mejorar y ajustar tú proceso de software, me llama la atención que Scrum ha cam-
biado muy poco en los últimos quince años. El framework DAD no asume que tu proceso se quedará estancado, de hecho asume lo contrario. Conforme he trabajado con clientes en todo el mundo, los he visto comenzar con un ciclo de vida similar al de Scrum como el que se muestra en la figura 1 pero conforme pasa el tiempo maduran hacia una estrategia más esbelta, tipo Kanban como la que se muestra en la figura 3. La figura 3 muestra un ejemplo de ciclo de vida hacia el que tienden a migrar los equipos experimentados. Conforme pasa el tiempo se dan cuenta que las distintas prácticas ágiles no necesitan la misma cadencia. Con la estrategia basada en iteraciones de la figura 1, las prácticas ágiles tales como planeación just-in-time, modelado just-in-time, demos y retrospectivas se ejecutan juntas al final/inicio de cada iteración. En lugar de planear al principio de cada iteración, ¿por qué no planeamos cuando necesitamos?, ¿por qué no hacemos demos cuando las necesitamos?, ¿por qué no generamos builds continuamente y los liberamos conforme se necesite? Cuando empiezas a darte cuenta de este tipo de cosas y actuar sobre ellas, comienzas a migrar de una estrategia basada en iteraciones a una basada en un flujo continuo de desarrollo. Este flujo continuo típicamente requiere mayor habilidad y disciplina que al basarse en iteraciones o sprints. Otra diferencia significativa entre ambos ciclos de vida se da en la forma en la que se da prioridad a los elementos de trabajo. En la figura 1, los elementos de trabajo, incluyendo los requerimientos, son tratados como una lista (stack) con prioridades, similar a como se hace en Scrum (aunque DAD describe varias estrategias posibles para priorizar el traba.BIO
Scott Ambler (@scottwambler) es Chief Metodologist en IBM Rational. Su trabajo consiste en trabajar con clientes de IBM en todo el mundo para ayudarlos a mejorar sus procesos de software. Es fundador de las metodologías Agile Modeling, Agile Data, Disciplined Agile Delivery y Enterprise Unified Process. Scott ha escrito más de 20 libros sobre procesos de software, es editor colaborador en Dr. Dobb’s Journal y será conferencista magistral en SG Conference and Expo 2012.
30
.PRÁCTICAS Procesos
jo). En cambio, en la figura 3 los elementos de trabajo son tratados como un grupo (pool) de opciones que son categorizadas de acuerdo a distintos esquemas de prioridad, y los elementos de trabajo se jalan del grupo cada que se dispone de capacidad para hacerlo. Dicha estrategia brinda mayor flexibilidad pero requiere mayor disciplina también.
¿Por qué DAD?
Este artículo provee un resumen del nuevo libro “Disciplined Agile Delivery: A Practitioners Guide to Agile Software Delivery in the Enterprise (IBM Press, June 2012)” escrito por Scott W. Ambler y Mark Lines. Para conocer más sobre DAD, visita http://disciplinedagiledelivery.com o asiste a la conferencia que Scott dará sobre este tema en SG Conferencia y Expo (http://sg.com.mx/sgce/2012).
www.sg.com.mx |
Software Guru
DAD es una estrategia de punto medio. Mientras que RUP era demasiado y Scrum era muy poco, creo que DAD es justo la medida adecuada. El reto con RUP es que la mayoría de los equipos no cuenta con el conocimiento de procesos necesario para configurarlo apropiadamente, lo cual típicamente resulta en un proceso muy pesado y con tareas de más. Por otro lado, los equipos de Scrum tienden a tener el problema de no contar con suficiente conocimiento de procesos para completarlo, y la consecuencia de esto es que se invierte un esfuerzo significativo en reinventar o reaprender técnicas para poder atender la gran cantidad de aspectos que Scrum no cubre. En ambos casos, se
podría evitar desperdicio de esfuerzos si existiera una opción de punto medio, DAD es esa opción. El framework DAD también provee la base para escalar métodos ágiles, llevándolo a proyectos complejos e incluso a nivel de un portafolio de proyectos. DAD muestra cómo se puede entregar exitosamente una solución de TI desde el inicio del proyecto a través de la construcción y hasta la liberación a producción. Una vez que comprendes como hacer esto en proyectos individuales puedes evolucionar tu estrategia para enfrentar la complejidad que se da al llevar Agile a mayor escala. En pocas palabras, aprende a caminar antes de aprender a correr.
Figura 3. El ciclo de vida avanzado de DAD
.BIO Mark Lines (@mark_lines) es cofundador de UPMentors. Es un coach de métodos ágiles disciplinado y proporciona mentoring en todos los aspectos del desarrollo de software. Es un apasionado de reducir el gran desperdicio en la mayoría de las organizaciones de IT, e implementa estrategias prácticas para acelerar la ejecución y mejorar la calidad del software utilizando técnicas ágiles y esbeltas. www.UPMentors.com
31
.PRÁCTICAS Usabilidad
Concretando la
Interfaz
niveles de prototipeo
›› Por Pamela Rodríguez
C
omenzando por establecer términos relevantes, con prototipo (o wireframe) se hace referencia al producto gráfico que resulta de plasmar las ideas relacionadas con la construcción de una interfaz. Esto significa que es una imagen que representará la visión que el equipo tiene de cómo debe ser el proyecto terminado, una fotografía del futuro. Antes de empezar a hablar sobre la creación de prototipos y las diversas opciones que existen para ello, es importante destacar la razón por la cual estos no son un proceso prescindible. Se han realizado muchos debates al respecto de porqué los prototipos podrían llegar a ser una pérdida de tiempo y de cómo los tiempos de desarrollo del proyecto como actividad integral quizá no los permitan. Sin embargo, incluso si no se llega a un prototipo completo de calidad alta, no es un proceso que sea recomendable evadir. Todos los procesos, investigaciones, análisis y conceptualizaciones realizados durante el proceso de diseño de una interfaz efectiva se ven integrados en una serie de prototipos de calidades variables. El reflejar todo esto en un solo producto terminado va más allá de ser una simple página más en el portafolio empresarial o profesional, puesto que es una herramienta sumamente poderosa de comunicación entre los miembros de un equipo, e incluso entre el equipo y otros miembros de la organización. Al momento de intercambiar ideas con el equipo de trabajo, plasmarlas como elemento gráfico es siempre más eficaz que una simple explicación o un documento escrito, este proceso puede llevarse a cabo en conjunto con pizarrones blancos (de pared completa son los más útiles) o con rollos de papel bond y marcadores gruesos. De este modo, los participantes se aseguran de estar ‘en el mismo canal’ o siguiendo una misma línea al momento de llegar a la culminación de la parte de diseño del proyecto. Y no solo se trata, como se mencionó antes, de comunicación entre los miembros de un mismo equipo. Vender una idea a las personas que toman las decisiones de peso en una empresa es mucho más simple cuando se cuenta con una propuesta gráfica completa y no solo resultados del análisis y la planeación. Por otra parte, y más a un nivel operativo, la comunicación entre el equipo de diseño y el equipo de desarrollo es siempre un tema complicado por la variación de perfiles profesionales entre los miembros de ambas partes. La existencia de algo gráfico que concrete las ideas del equipo de diseño es un paso imprescindible para que la gente de desarrollo sepa cómo avanzar y continuar con los esfuerzos dentro del proyecto. 32
Niveles de prototipeo
Dejando atrás los miles de argumentos que podrían defender el uso de prototipos y habiendo dejado establecido que son un paso necesario, cabe resaltar ahora que existen niveles de calidad en la creación del prototipo. Utilizando la palabra ‘calidad’ como referencia a la cantidad de detalle que se refleja en la representación gráfica de cada pantalla dentro del proyecto. Para efectos prácticos, y siendo normalmente los prototipos generados durante sesiones de lluvia de ideas entre miembros del equipo, existen los llamados de calidad baja. Estos son más como dibujos o bocetos de lo que se tiene planeado plasmar en la interfaz, el posicionamiento, los tamaños aproximados, etc. Normalmente no incluyen colores (o muy pocos) ni imágenes reales (solo algunos bocetos representativos de íconos en algunas ocasiones).
Figura 1. Ejemplos de prototipeo.
La figura 1 presenta ejemplos de prototipeo de baja calidad en papel para interfaces de aplicaciones móviles. Basta con seguir estándares de proporciones y tamaños para adaptarse a cualquier plataforma que se tenga contemplada para el proyecto en cuestión. Existen, además, diversas herramientas en línea que pueden emplearse para el desarrollo de prototipos en calidad baja si no se es muy afín al uso de papel y lápiz o marcadores y pizarrones. El medio digital, por otra parte, nos permite difundir de manera más sencilla el resultado de la lluvia de ideas o la conceptualización en equipo de una interfaz.
.PRÁCTICAS
Usabilidad
“...incluso si no se llega a un prototipo completo de calidad alta, no es un proceso que sea recomendable evadir.”
Estas herramientas disponibles son: • Balsamiq http://www.balsamiq.com/ (gratuito en línea, con costo si se quiere instalar en su computadora) • Mockflow http://www.mockflow.com/ (gratuito en línea con limitaciones de cantidad de prototipos) • Pencil Project http://pencil.evolus.vn (gratuito para descargar e instalar)
vos de apoyo a la creación de prototipos de alta calidad bajo el estándar de retículas 960 disponibles para descarga (http://960. gs/), así como para prototipeo bajo los estándares marcados por la nueva tendencia de retículas fluidas (http://lessframework. com). Dependerá del enfoque, las necesidades del proyecto en específico y de retículas estáticas contra retículas fluidas, el cual es un tema muy extenso, por lo que se recomienda documentarse ampliamente al respecto.
Prototipos estáticos y prototipos funcionales
Parte del debate en contra de la creación de prototipos (principalmente prototipos de alta calidad) es la posibilidad de saltar directamente a un prototipo funcional o demo, es decir, usar una carcasa HTML y CSS para plasmar ideas tanto visuales como de navegación, la cual ahorrará mucho trabajo de front-end al momento de pasar a la etapa completa de desarrollo. Esta no es una manera incorrecta de trabajar tampoco, y al final es cuestión de definir equipos y capacidades. Si su equipo de diseñadores no tiene las capacidades necesarias para generar prototipos funcionales que puedan después ser parte del desarrollo, los prototipos estáticos son su mejor opción a menos que planee incluirse gente de desarrollo en las fases de diseño. .BIO
Pamela Rodríguez (@thepam) es egresada de la Universidad de Monterrey de la carrera de Ingeniería en Sistemas Computacionales con estudios avanzados en diseño web. Actualmente es Diseñadora de interfaces para aplicaciones móviles en Naranya Apphouse, docente, conferencista y autora de artículos relacionados. http://thepam.blogspot.com
33
Software Guru
Figura 2. Ejemplo de elementos para un prototipo.
www.sg.com.mx |
Hay muchas otras herramientas en línea disponibles para estos fines, estas son las que por experiencia de uso se recomiendan. También existen herramientas de prototipeo para aquellos que están acostumbrados al uso laboral de un dispositivo móvil tipo tablet. Como un tema aparte existen además los prototipos de calidad alta, que son aquellos que ya se concretan más como una fotografía de lo que sería la interfaz terminada. Esto significa que en esta ocasión sí deben presentarse los colores reales, ejemplos de imágenes y texturas, iconografía, botones y demás elementos necesarios. Un prototipo de calidad alta, por su alto nivel de detalle, se lleva a cabo por medio de software de diseño como Adobe Photoshop, Fireworks o Illustrator. Se sugiere el apoyo de galerías de elementos gráficos enfocados a la plataforma que se requiera para agilizar el proceso lo más posible. Por ejemplo, la figura 2 muestra un conjunto de elementos gráficos disponible en línea para llevar a cabo la construcción visual de interfaces para aplicaciones de iPad. Existen, por supuesto, alternativas gratuitas al software de Adobe tanto en línea como disponibles para instalación. Una herramienta excelente para descarga e instalación es Inkscape (http://inkscape.org/). Si se desea trabajar en línea, hay alternativas como Pixlr (http://pixlr.com/) o Aviary Phoenix (http://advanced.aviary.com/ launch/phoenix) que también son muy completas. En el caso de un prototipo de alta calidad, por supuesto, es mucho más relevante el seguimiento estricto de estándares de diseño generales y por plataforma. En el caso de web, hay archi-
.PRÁCTICAS Prueba de Software
Los Retos de un Tester de Videojuegos
¿la profesión soñada de muchos?
››Por Berenice Ruiz Eguino
A
diferencia de lo que todos podríamos juzgar, ser probador de videojuegos no es un rol que implique tareas triviales, pueden ser disfrutables hasta cierto punto, pero de ninguna manera tan simples como para pensar que sólo se requiere de pasar horas y horas jugando. Son sin duda indispensables ciertas habilidades y atributos, además de conocimientos y especialización en ciertas áreas, como es el caso por ejemplo de aquellos Testers que específicamente se enfocan en el área de “Localización” de videojuegos. Si las compañías que los desarrollan, no probaran de forma exhaustiva y adecuada, definitivamente “pondrían en juego” no sólo las jugosas ganancias que las miles de copias de un producto específico colocado en el mercado global les pudiera generar, sino toda una reputación que se ha venido forjando mediante la aceptación de cada versión de productos que sus más asiduos seguidores están dispuestos a adquirir, por ello es que se toman tan en serio el proceso de probar arduamente cada nuevo producto antes de liberarlo al mercado. Los seguidores no perdonan, y menos cuando tienen medios masivos como las redes sociales, mediante los cuales pueden literalmente “destrozar” o desacreditar un producto en específico que no hubiese cumplido con sus expectativas de calidad. Ciertamente, de la población joven es de donde más probadores de videojuegos surgen, quizás en cierta medida porque es ese segmento a quien más le ha tocado vivir el “boom” de esta industria tan rentable.
• Comunicarse adecuadamente con otros equipos (especialmente con los desarrolladores). • Tener experiencia (deseable) en programación y diseño. Definitivamente, aún cuando el probar la funcionalidad y la “jugabilidad” de un videojuego, puede implicar realizar ciertas actividades de un proceso normal de pruebas funcionales de cualquier tipo de software, ya que igualmente existe una planeación, diseño de pruebas, ejecución, monitoreo, reporte de “bugs”, obtención de métricas y seguimiento a correcciones, pueden presentarse ciertas modalidades o adaptaciones dentro del proceso típico de pruebas, ya que hay que categorizar de forma distinta ciertos elementos, de lo contrario los tiempos para probar y corregir pueden resultar ser más limitados, la dinámica de liberar nuevas versiones corregidas puede variar, pues en este sector en especial resulta muy costoso detectar los defectos de forma tardía, los materiales o documentación fuente con que en cada caso se cuente pueden ser también restrictivos desde cierto punto de vista. Por ejemplo, quienes se encargan de realizar traducciones, usualmente no cuentan con la versión original del juego completo, sino que reciben muchas de las veces sólo los textos originales en documentos, pero sin tener el contexto completo con imágenes u otros elementos que les ayudarían a efectuar mejores adaptaciones de diálogos. Esto en la mayoría de los casos, se debe al nivel de confidencialidad que las empresas desarrolladoras exigen para evitar que puedan efectuarse reproducciones piratas masivas de las versiones beta de videojuegos a que los Testers tienen acceso, o bien, a que puedan revelar a personas cercanas ciertos secretos que pueden resultar cruciales para el juego que se encuentran probando. Ciertamente existen varias medidas que pueden tomarse, como convenios estrictos de confidencialidad, sin embargo no siempre resultan ser el mejor de los candados. Entre los errores más comunes a los que se enfrentan los testers de videojuegos se encuentran:
Características de un Tester de Videojuegos
Evaluar la calidad de software de videojuegos va desde probar su funcionalidad hasta ser un experto traductor, además de ser un experto “localizador de videojuegos”. Aún para cada caso resulta de gran importancia contar con al menos las siguientes características: .BIO Sandra Berenice Ruiz Eguino es Directora de Operaciones de e-Quallity, además ha participado como Consultora Senior en proyectos de mejora de organizaciones de Prueba de Software. Cuenta con certificación internacional en Pruebas por el ASTQB. A lo largo de su trayectoria profesional ha actuado también como Ingeniero de Pruebas Senior, Líder de Proyectos, Administradora de Proyectos nacionales e internacionales, analista y desarrolladora. Ha sido profesora de la Universidad Autónoma de Guadalajara (UAG), donde realizó sus estudios de Maestría en Ciencias Computacionales.
• Tener amplia experiencia jugando diversos tipos de videojuegos (en distintas plataformas). • Sensibilidad lingüística. • Saber más de un idioma. • Ser una persona ética. • Saber trabajar en equipo. • Tener gran flexibilidad de horario. • Tener pasión por la industria de los videojuegos. • Tener como lengua nativa aquella en la que se “localizará” un videojuego. • Tener capacidad de organización.
• Bajo rendimiento. • Glitches. • Errores de instalación. • Malas traducciones. • Manejo incorrecto de sesiones. • Errores de adaptación cultural. • Baja calidad en los textos. • Errores de terminología del juego. • Manejo incorrecto de personajes y musicalización. • Errores de plataforma. • Errores de estándares. • Problemas físicos en las consolas o hardware requerido. 34
.PRÁCTICAS
Prueba de Software Evaluar la calidad de software
computadoras, monitores especiales, televisiones, consolas y/o hardware especiales para las pruebas, tarjetas de memoria, dispositivos para grabación, videos o aparatos DVD’s grabadores, cables especiales, discos duros, mandos y conexiones rápidas. Cualquier falla que pueda retrasar los tiempos de liberaciones establecidos, se traduce en pérdidas económicas.
También pueden presentarse errores de lógica o aspectos que van desde el movimiento hasta los efectos de física que dan mayor realismo a las escenas (según sea el juego del que se trate), problemas en interacción de los personajes y el desarrollo mismo de la historia del videojuego. Algunos errores de programación pueden incluso generar congelamiento del juego bajo ciertas circunstancias, o errores en el control de los “scores” de cada jugador, por ejemplo, en juegos de competencias o deportes, errores de performance si mientras se juega teniendo activas descargas de películas, música, videos en internet o se tienen abiertos otros programas, el juego pierde dinamismo. Entre estos recién listados, y tantos otros tipos de problemas, los Testers de videojuegos se enfrentan a otros retos que, en su gran mayoría, tienen que ver con aspectos de “localización”, entendiéndose dicho término como “la preparación y/o adaptación de un videojuego para ser utilizado en varias localidades del mundo, lo cual va mucho más allá de efectuar una simple traducción de lenguaje, sino que abarca además otros aspectos como: lingüística, cultura, diferencias en hardware y software, diferencias en cuestiones legales, identificación con iconografía y musicalización locales, idiosincrasia, etc.” Definitivamente el humor de un norteamericano no será el mismo al de un mexicano, habrá frases o palabras que de un país o región a otra, puedan resultar ofensivas a los personajes, y habrá frases de moda locales. Estos y otros aspectos deben cuidarase como parte de la localización de un videojuego. A continuación se mencionan algunos retos importantes de esta área.
Llevar a cabo una real preparación para la localización de un videojuego: • Si el contenido del juego será traducido a varios idiomas, es indispensable contar dentro del equipo de pruebas con un guionista de excelente nivel de inglés, por ser éste uno de los idiomas más utilizados en diferentes regiones y dado que originalmente el material fuente pudiera estar desarrollado en dicho idioma. • Realizar comprobación de gramática, comprobación de coherencia de términos, comentarios adecuados, identificar posibles malentendidos, bromas y/o modismos que no aplicarían en otros idiomas. • Revisar longitudes de diálogos, especialmente los de la pantalla, a fin de identificar que no excedan las longitudes máximas posibles, ya que en algunos idiomas se requiere de más palabras para traducir lo mismo.
Apoyar a la organización a mantener bajos los costos de traducción: • Ya sea mediante la reutilización de términos y frases ya traducidas, con el fin no sólo de traducirlos una sola vez, sino de además mantener una consistencia en el empleo de dichos términos. • Reducir la cantidad de contenido en materiales como manuales, instructivos, archivos “Read me”, etc. • Acortar las explicaciones, descripciones y diálogos mientras sea posible, dejando los mensajes claros pero con menos palabras (no recortarlo demasiado si esos mensajes además serían grabados en voz, ya que podrían encimarse los diálogos). • Emplear el menor número posible de actores de doblaje, interpretando cada uno a varios personajes. • Apoyar para mantener en tiempo y forma la infraestructura necesaria para probar los videojuegos, entre esta infraestructura podemos encontrar
Evaluar el adecuado de doblaje y grabación de audio. • El tester tiene una labor importante también en este proceso de probar los doblajes efectuados por los actores, ya que debe detectar gran cantidad de inconsistencias y errores ocasionados por la dificultad que esta tarea conlleva, desde problemas por entonaciones inadecuadas ante expresiones de júbilo, enojo o cualquier otra emoción que sin tener el contexto completo pueden pasar desapercibidas.
Si implica tantos costos, tiempo, esfuerzo ¿por qué invertir en “localizar un videojuego”?
Por la sencilla razón de que las organizaciones dedicadas al desarrollo de éstos, vislumbraron que es una importante estrategia para incrementar la cantidad de copias de videojuegos vendidas en cada región/país. El realizar versiones especialmente adaptadas para cada territorio (tal como se haría para el caso de los doblajes en las películas), se traduciría en mayores ingresos que definitivamente retornarían la inversión en el corto plazo. Es tan dinámico el ritmo con que se avanza en el mundo de los videojuegos, que si bien es cierto existen herramientas de software para llevar a cabo procesos de traducción/localización, existen tantas alternativas como queramos ver, todas orientadas a expandir aún más el alcance de este tipo de productos de software, y a final de cuentas, para los usuarios finales lo realmente importante será que puedan permanecer ininterrumpidamente jugando, sin problemas de calidad en los mismos que les impidan romper nuevos récords. 35
www.sg.com.mx |
• Errores de concordancia en voces de personajes. • Reflejo inadecuado de expresiones según el contexto del diálogo. • Manejo inadecuado de teclas, botones, limitaciones para manipular zonas de la pantalla. • Errores de usabilidad en general.
Software Guru
de videojuegos va desde probar su funcionalidad hasta ser un experto traductor, además de ser un experto “localizador de videojuegos”.
.PRÁCTICAS Arquitectura
Arquitectura de Software y Introducción
En la última década la arquitectura de software ha cobrado una importancia cada vez mayor. Esta tendencia probablemente continuará, entre otras razones, porque en la nueva versión de CMMI-DEV (v1.3) se han realizado actualizaciones en las áreas de proceso de ingeniería y se han considerado diversos aspectos relacionados con la arquitectura de software [2]. En la entrega de hoy hablaré de forma resumida acerca de las áreas de proceso de CMMI-DEV que involucran aspectos relacionados con la arquitectura de software.
CMMI
De acuerdo al SEI, CMMI (Capacity Maturity Model Integration) es un enfoque de mejora de procesos que proporciona a las organizaciones los elementos esenciales de procesos efectivos que ayudan a mejorar su desempeño. La mejora de proceso basada en CMMI incluye la identificación de las fortalezas y debilidades de la organización en cuanto a procesos y la realización de cambios para transformar las debilidades en fortalezas [1]. Existen tres variantes de CMMI: CMMI-DEV (desarrollo), CMMISVC (servicios) y CMMI-ACQ (adqusiciones) aunque para ésta columna nos interesa CMMI-DEV que provee guías para medir, monitorear y administrar los procesos de desarrollo. El modelo CMMI está estructurado en niveles de madurez si se utiliza una representación llamada escalonada. En la representación escalonada se usan conjuntos establecidos de áreas de proceso para definir una ruta de mejora para la organización que se establece en términos de 5 niveles de madurez (del 1 al 5). Un área de proceso es un cúmulo de prácticas relacionadas en un área particular que, cuando son implementadas en conjunto, satisfacen un grupo de objetivos que se consideran importantes para hacer mejoras en esa área particular. Los componentes del modelo se agrupan en tres categorías: requeridos, esperados e informativos. Los componentes requeridos son esenciales para lograr la mejora en un área de procesos particular. La satisfacción de objetivos específicos y genéricos se usa en las evaluaciones como una base para decidir si un área de proceso ha sido satisfecha. Los componentes esperados describen actividades que son importantes para lograr un componente requerido. Los componentes esperados guían a quienes implementan mejoras o realizan evaluaciones. Los componentes esperados en CMMI son las prácticas específicas y genéricas. Antes de que .BIO los objetivos puedan ser conEl Dr. Humberto Cervantes es siderados como satisfechos, las profesor-investigador en la UAMprácticas descritas, o alternativas Iztapalapa. Además de realizar docencia e investigación dentro de aceptables, deben estar presentes la academia en temas relacionados con arquitectura de software, reaen los procesos planeados e imliza consultoría y tiene experiencia plementados de la organización. en la implantación de métodos de arquitectura dentro de la industria Los componentes informativos, de desarrollo que cuenta con certificaciones en CMMI. Ha recibido ditales como sub-prácticas o ejemversos cursos de especialización en el tema de arquitectura de software plos de productos de trabajo, son en el Software Engineering Institute, componentes de CMMI que y está certificado como ATAM Evaluator y Software Architecture ayudan a los usuarios del modelo Professional por parte del mismo. (www.humbertocervantes.net) a entender los componentes requeridos y esperados.
CMMI
››Por Humberto Cervantes
Arquitectura en áreas de proceso de ingeniería
Las áreas de proceso específicas a CMMI-DEV son las 5 que se agrupan en la categoría de Ingeniería: • Desarrollo de Requerimientos (RD) • Solución Técnica (TS) • Integración del Producto (PI) • Verificación (VER) • Validación (VAL) Estas 5 áreas de proceso se encuentran, además, en el nivel 3 de madurez en la representación escalonada. A continuación se describen los aspectos relacionados con la arquitectura en cada una de éstas áreas de proceso.
Desarrollo de Requerimientos (RD)
El propósito del Desarrollo de Requerimientos es capturar, analizar, y establecer requerimientos de cliente, de producto y de componentes del producto. En esta área de proceso encontramos varios aspectos relevantes en el contexto de la arquitectura de software: En la práctica específica 1.1 (Capturar Necesidades), se menciona como ejemplo de técnica los talleres de captura de atributos de calidad en donde participan involucrados. En la práctica específica 1.2 (Transformar Necesidades de Involucrados en Requerimientos de Cliente) se menciona como sub-práctica la priorización de atributos de calidad. En la práctica específica 2.1 (Establecer Requerimientos de Producto y Componente de Producto) se menciona como sub-práctica el desarrollo de requerimientos arquitectónicos que capturen atributos de calidad críticos y sus métricas necesarias para establecer la arquitectura y diseño del producto. En la práctica específica 2.2 (Asignar Requerimientos a Componentes del Producto) se habla acerca de la manera en que los atributos de calidad se mapean a componentes del producto y se menciona como sub-práctica la asignación de requerimientos y restricciones a la arquitectura. En la práctica específica 2.3 (Identificar requerimientos de interfaces) se menciona que los requerimientos de interfaces son una parte integral de la definición de la arquitectura. Finalmente, en la práctica específica 3.2 (Establecer una definición de Funcionalidad y Atributos de Calidad Requeridos) se menciona como sub-prácticas la identificación de funcionalidades y atributos de calidad deseables y la determinación de atributos de calidad significativos basados en los drivers de negocio. De los métodos que han sido presentados en ediciones anteriores de ésta columna, QAW o algún método análogo de captura y especificación de atributos de calidad podría ser usado dentro de ésta área de proceso (Edición SG 28).
Solución Técnica (TS)
El propósito de Solución Técnica es elegir, diseñar e implementar soluciones a los requerimientos. En ésta área de proceso encontramos también múltiples aspectos relativos a la arquitectura de software. En la práctica específica 1.1 (Desarrollar alternativas de solución y criterios de selección) se habla de que las soluciones están basadas en arquitecturas que satisfacen los atributos de calidad críticos y, como sub-práctica, se menciona la 36
.PRÁCTICAS
Arquitectura “E s
muy útil usar la arquitectura como un medio de organización de los datos técnicos ”.
El propósito de Integración del Producto es ensamblar el producto a partir de sus componentes, asegurar que el producto una vez integrado se comporta de forma adecuada. En esta área de proceso se hace mucho menos referencia al concepto de arquitectura que en las áreas de proceso anteriormente descritas, sin embargo, hay dos puntos clave que están directamente relacionados con la arquitectura: la estrategia de integración y el aseguramiento de la compatibilidad de interfaces. Respecto a la estrategia de integración, CMMI hace énfasis en el hecho de que la integración del producto puede ser realizada de forma incremental, de acuerdo a un proceso de desarrollo iterativo. Por otro lado, también se menciona que la estrategia de integración debe estar en armonía con el diseño del producto del área de proceso de Solución Técnica (aquí es donde ocurre la conexión con la arquitectura). Por otro lado, en la integración de producto, las interfaces juegan un papel clave y éstas también son consideradas como parte fundamental de la arquitectura. Ninguno de los métodos que han sido presentados en ediciones anteriores se apoya directamente en ésta área de proceso, sin embargo, el uso de métodos en las áreas de proceso de RD y TS aumentaría la probabilidad de realizar una integración exitosa. Por otro lado, la estrategia de integración está relacionada con la manera en que se integran las actividades de desarrollo de arquitectura en el ciclo de vida de desarrollo (Edición SG 32).
Verificación (VER)
El propósito de la Verificación es asegurar que los productos de trabajo seleccionados cumplan sus requerimientos especificados. En la práctica específica 1.1 (Seleccionar Productos de Trabajo para Verificación) se menciona, entre otros ejemplos de métodos de verificación, las evaluaciones de arquitectura. En la práctica específica 2.1 (Preparar para las Revisiones de Pares) una sub-práctica relevante es la determinación del tipo de revisión por pares a realizar y, como ejemplos, se mencionen las revisiones activas y la evaluación de conformidad de la implementación de la arquitectura.
Validación (VAL)
El propósito de Validación (VAL) es demostrar que un producto o componente de producto se ajusta a su uso previsto cuando se sitúa en su entorno previsto. Al igual que Integración del Producto, ésta área de proceso no hace mucho énfasis respecto a la arquitectura lo cual es entendible pues es relativamente inusual validarla, a diferencia de validar partes del sistema construidas sobre la arquitectura. Sin embargo, hacen una mención relevante: la práctica específica 1.1. (Seleccionar Productos para Validación) menciona como ejemplo de producto que puede ser validado el diseño del producto y como métodos las demostraciones de prototipos y los análisis del producto. Al igual que para PI, ninguno de los métodos que han sido presentados en ediciones anteriores se podría usar directamente en ésta área de proceso, sin embargo podría ser útil el tener una arquitectura ejecutable sobre la cual podrían realizarse pruebas para apoyar a realizar la validación (ver SG 32).
En conclusión
Como se puede apreciar, la versión 1.3 de CMMI-DEV incluye muchos aspectos relacionados con la arquitectura de software, principalmente en las áreas de proceso de la categoría de ingeniería. Una gran cantidad de prácticas específicas de las áreas de proceso incluyen sub-prácticas que se mapean directamente a los métodos del ciclo de vida de desarrollo de la arquitectura que han sido presentados en otras ediciones de ésta columna. Además, el glosario del modelo incluye diversas definiciones relevantes al tema. Por otro lado, otras áreas de proceso están conectadas con la arquitectura. Un ejemplo de ello es Análisis de Decisiones y Resolución (DAR, de nivel 3), pues a través del proceso definido para esta área, se pueden documentar las decisiones de diseño más importantes. Finalmente, la introducción de métodos de arquitectura en la organización puede llevarse a cabo como una instancia del proceso asociado con el área de proceso de Administración del Desempeño Organizacional (OPM), de nivel 5 (ver SG 34). Por todo lo anterior, es conveniente considerar seriamente la realización de un esfuerzo de introducción de métodos que cubran el ciclo de vida de desarrollo de arquitectura de software dentro de la organización, particularmente si dicha organización está buscando obtener una certificación de CMMI nivel 3 o superior.
Referencias: [1] CMMI Product Team, “CMMi for Development, Version 1.3”, Technical Report CMU/ SEI-2010-CR-033, 2011 [2] Jones, L. y Konrad, M. “Capability Maturity Model Integration (CMMI) V1.3 and Architecture-Centric Engineering”, presentación en Software Process Improvement Network, Mayo 2011
37
Software Guru
Integración del Producto (PI)
De los métodos que han sido presentados en ediciones anteriores, ATAM, ARID o algún método análogo de evaluación de arquitectura podría ser usado dentro de ésta área de proceso (Edición SG 31).
www.sg.com.mx |
identificación de patrones arquitectónicos aplicables. La práctica específica 2.1 (Diseñar el Producto o Componentes del Producto) se enfoca particularmente en la creación de la arquitectura que, de hecho, es mencionada como un ejemplo de producto de trabajo. Cabe señalar que en CMMI, la creación de la arquitectura es parte del “Diseño Preliminar”. Como subprácticas relevantes se incluyen la identificación, desarrollo o adquisición de métodos de diseño apropiados para el producto y la documentación del diseño. En la práctica específica 2.2 (Establecer un Paquete de Datos Técnicos) se menciona que es muy útil usar la arquitectura como un medio de organización de los datos técnicos. Como sub-práctica relevante se menciona la determinación de vistas a ser usadas para documentar la arquitectura así como la documentación de decisiones clave de diseño. De los métodos que han sido presentados en la sección de Arquitectura de ediciones anteriores, ADD y Views and Beyond o métodos similares de diseño y documentación podrían ser usados dentro de ésta área de proceso (Edición SG 29 y 30).
.PRÁCTICAS Ágil
Un Acercamiento al
Pensamiento en Sistemas
››Por Elizabeth Rivera
E
l pensamiento en sistemas es considerado como la base para el pensamiento Lean y Agil. A continuación un breve acercamiento a este interesante tema.
¿Qué es el pensamiento en sistemas y por qué es importante considerarlo?
El pensamiento natural de los individuos se revela durante su infancia con la pregunta ¿Por qué? Es, según se puede ver, la forma en que naturalmente nos preguntamos acerca del mundo que nos rodea. Es la filosofía natural del ser humano. ¿Por qué funcionan las cosas de la forma en que lo hacen? Entender esto permite interactuar de una manera más efectiva con todo lo que nos rodea: complejos sistemas relacionados entre sí y compuestos por elementos que a su vez forman otros sistemas. Gracias al pensamiento en sistemas podemos regresar a las preguntas esenciales: ¿Por qué?, ¿Qué nos llevará a un mejor entendimiento? El “cómo”, aprendido, será el apoyo y no al revés. [1] Consideremos que un sistema es un grupo de elementos interconectados o interrelacionados que forman un todo unificado y complejo. Los elementos que forman el sistema pueden ser tangibles, tal como las piezas que forman el motor de un auto o intangibles como los estados de la mente de un individuo. Un ejemplo de esto es un equipo de investigación y desarrollo en una empresa de software. El sistema lo forman los miembros del equipo, los instrumentos de investigación y los procesos que siguen para crear nuevos productos. Este equipo/sistema, se interrelaciona con otros equipos/sistemas dentro de la misma empresa, tales como el equipo de finanzas, de compras, .BIO etc., para formar un sistema mayor que es la empresa la cual, a su vez, Elizabeth Rivera tiene amplia experiencia en el desarrollo de forma parte de la rama tecnológica sistemas y es Subdirectora de Informática para el programa de un sistema económico de una Oportunidades de la SEDEregión. Todos en algún momento y SOL. Forma parte del CoCo del Capítulo México del ALN (Agile de alguna manera formamos parte Leadership Network). Actualmente está en proceso de titulación de distintos sistemas que están inde la maestría en Tecnologías de Información y Administración en terconectados entre sí. el Instituto Tecnológico AutónoUn sistema, para ser nombrado mo de México (ITAM). como tal, debe tener ciertas carac-
terísticas, tales como: a) Todas las partes del sistema deben estar presentes para que el sistema pueda llevar a cabo su propósito. b) Todas las partes del sistema deben estar acomodadas de cierta forma para lograr el propósito. c) Un sistema tiene un propósito específico dentro de sistemas más grandes. d) Los sistemas tienden a mantener su estabilidad a través de fluctuaciones y ajustes. Por ejemplo, tómese el caso de una caja de bombones. Al retirar uno o meter otro no pasará nada. En cambio si se tiene un jardín y se retira un grupo de plantas para cambiarlas por otras, eso afectará el sistema que forma el jardín.
¿Por qué es importante considerar los sistemas?
Si se quisiera entender el por qué del comportamiento de alguno de los elementos, no se podría lograr tal objetivo simplemente aislando dicho elemento y dividiéndolo en partes para ver cómo funciona, es decir, analizarlo, para ello sería necesario recurrir a otro acercamiento, el pensamiento en sistemas, el cual nos explicaría el por qué de dicho comportamiento, es decir, busca entender la forma en que se relaciona el objeto de estudio con los demás elementos que constituyen el sistema.
Entonces, ¿qué es el pensamiento en sistemas?
El pensamiento en sistemas es un proceso de pensamiento que permite entender el todo. Ver el gran panorama, en lugar de perderse en cada arbusto. Tal entendimiento permite establecer relaciones de comportamiento, de conexión, de dependencia entre los elementos que lo constituyen de tal forma que permitiría explicar problemas complejos que contienen varias dependencias y diversos actores. Es importante considerar que “el sistema no es sólo la suma de las partes, es el producto de sus interacciones”. [2] El pensamiento en sistemas tiene su origen en el campo de la dinámica de sistemas fundado en 1956 por el doctor Jay Forrester. 38
.PRÁCTICAS Ágil
“La pregunta en este tipo de pensamiento es “¿Por qué?” y el resultado es “Entendimiento”.
Pensamiento en sistemas 1) Identificar el contenedor 2) Identificar sus propiedades y comportamientos 3) Desagregar el entendimiento del contenedor para identificar la regla o comportamiento funcional de cada una de sus partes. La pregunta en este tipo de pensamiento es “¿Por qué?” y el resultado es “Entendimiento”, lo cual permite encontrar la raíz del problema. De hecho, el pensamiento en sistemas es la forma natural de pensar del ser humano, no la forma analítica. El pensamiento en sistemas permite ver a las organizaciones como un sistema interactuando y desarrollándose a través del tiempo y pueden crearse modelos para predecir su comportamiento, lo que se conoce como dinámica de sistemas. Hay ocasiones en que las empresas aplican políticas focalizadas a una parte de la empresa; si estas políticas se simulan en el modelo se pueden observar resultados inesperados de dicha aplicación. Existen tres patrones importantes a considerar en el Pensamiento en Sistemas: [2] • Límites de crecimiento. • Desplazamiento de la carga • Suboptimización Límites de crecimiento. Cuando se logran los resultados deseados en un proceso, existe un efecto secundario que tiende a balancear el resultado obtenido de tal forma que si se empuja más este proceso para producir mayores beneficios, el efecto secundario mencionado se amplificará. Considere el caso de una máquina de producción. Existe un punto en el que el nivel de producción es el adecuado, pero si se sigue produciendo incesantemente, puede provocar que se desequilibre completamente el sistema.
Suboptimización. Optimizar cada parte de un proceso no implica necesariamente la optimización del todo. Si mi estrategia para entender un proceso es entender cada una de las partes que lo forman olvidándome de unirlas para crear un todo coherente, es muy posible que mis oportunidades de entender el proceso completo sean pocas.
Conclusión
El entendimiento claro de la diferencia entre pensamiento analítico y pensamiento en sistemas es crucial. Percibir a la organización como un sistema implica, por ejemplo, ver la diferencia entre la cooperación y la competitividad interna, donde la primera es más efectiva para llevar a la empresa a mejores niveles de desempeño. Igualmente entender que es posible mejorar el desempeño de cada parte del sistema y destruirlo al mismo tiempo. [5] Ciertamente el pensamientoen sistemas es el que nos permite entender esto. Y para finalizar, recordemos las palabras del doctor Ackoff: “El objetivo final de un sistema social es el desarrollo, no el crecimiento. Nuestra sociedad no entiende la diferencia entre ellos. Es posible desarrollarse sin crecer y se puede crecer sin desarrollarse.” [5]
Referencias: [1] Curso Gestión Lean Agil de Proyectos. Masa K Maeda. 27-28 marzo 2012. México, DF. [2] Poppendieck, Mary y Poppendieck, Tom, Lean Software Development: an Agile Toolkit, Addison Wesley, 2003. [3] http://en.wikipedia.org/wiki/Systems_thinking [4] http://waupaca.uwex.edu/files/2011/01/Systems-Thinking-2010.pdf [5] The Deming Library, Vol. 21, A Theory of System For Educators and Managers. CC-M Productions,1993.
39
Software Guru
Pensamiento analítico 1) Descomponer: identificar las partes que el objeto contiene. 2) Identificar las propiedades y comportamientos de cada una de esas partes 3) Ir agregando el conocimiento adquirido de cada parte para obtener el conocimiento del todo. La pregunta, en el pensamiento analítico es “¿Cómo?” y el resultado es “Conocimiento”. Con su uso se obtienen: procesos rígidos, organización piramidal, manejo top-down, optimización localizada.
Desplazamiento de la carga. Considerar que los síntomas son la causa raíz de un problema puede provocar que se atiendan los síntomas, éstos desaparezcan y el problema empeore. Tal es el caso de creer que el aumento de errores en un módulo de un sistema está directamente relacionado con la ineficiencia actual de un equipo de trabajo y para resolver el problema sea necesario presionar más a la gente. Pudiera ser esa la razón, pero es necesario indagar adecuadamente para descubrir la verdadera raíz del problema.
www.sg.com.mx |
A continuación, un comparativo de los pasos que sigue el pensamiento analítico y los del pensamiento en sistemas. [1]
.COLUMNA Código Innovare
Evolucionando los Paradigmas del Desarrollo de Software
L
os sistemas de información son de gran importancia para el soporte de los procesos de una organización. El disponer de un sistema que ayude a mejorar su desempeño, reducir errores, automatizar tareas y que además, proporcione en tiempo y forma la información necesaria para la correcta toma de decisiones, se convierte en una estrategia útil para que las organizaciones hagan frente a sus diversos competidores. Para desarrollar un sistema, se requiere llevar a cabo el análisis de los requisitos (que corresponde a la primera etapa del proceso de desarrollo de software), para definir las actividades que se desempeñan dentro de la organización y obtener las funcionalidades de software que el sistema debe cubrir. El análisis de requisitos es probablemente la etapa más importante del proceso de desarrollo, puesto que de las decisiones tomadas en esta etapa dependerán las funcionalidades que el sistema a desarrollar deberá cumplir o no. Una correcta definición de los requisitos permite que el sistema llegue finalmente a ser exitoso desde los puntos de vista de los objetivos de la organización, costos, funcionalidad, sencillez y capacidad de soporte. M.C. Karen Mariel Nájera Hernández es egresada de la Universidad Autónoma de Puebla de la carrera Ingeniería en Ciencias de la Computación. Obtuvo el grado de Maestra en Ciencias en el área de Ciencias de la Computación en la especialidad de Tecnologías Web por el Centro de Investigación y Desarrollo Tecnológico (CENIDET) en donde en conjunto con la Fundación Bruno Kessler (Italia) desarrolló trabajos de investigación enfocados al modelado organizacional y ontologías. Actualmente se colabora en la Gerencia de Desarrollo de Nuevos Productos para la web semántica en INFOTEC. Karen. najera@infotec. com.mx
Problemáticas relacionadas
El análisis de requisitos se puede llevar a cabo mediante técnicas tradicionales como entrevistas, talleres, prototipos etc. Sin embargo, existen un sin número de dificultades que se pueden presentar en este proceso ocasionando que a pesar de los esfuerzos realizados por los analistas un alto porcentaje de los sistemas no llegan a cubrir al 100% las necesidades de la organización. En primera instancia se requiere de la habilidad de los analistas para especificar correctamente los requisitos de un sistema, puesto que las metas de la organización pueden no ser explícitas, difíciles de comprender y presentar contradicciones o ambigüedades. Asimismo, el analista tiene la tarea de involucrar en el análisis a todas las partes interesadas (la organización en sí, directivos y usuarios finales por ejemplo) y sus necesidades para que se obtengan y depuren sus requisitos de la forma más fidedigna posible. De manera general, la baja eficiencia del sistema final es causado ya sea por no llevar a cabo el análisis de requisitos adecuadamente, o porque las técnicas tradicionales no
permiten profundizar lo suficiente para determinar las funcionalidades que el sistema debe cubrir.
Partiendo en dos
Grupos de investigación en el área de la ingeniería de software han propuesto dividir la etapa de análisis de requisitos en dos sub etapas: la etapa de requisitos tempranos (requisitos relacionados con la organización) y la etapa de requisitos tardíos (requisitos relacionados con el sistema). La etapa de requisitos tardíos tiene el objetivo de producir el documento de especificación de requisitos que se entrega a los desarrolladores para que el sistema entre en producción. Por otro lado, la etapa de requisitos tempranos tiene como objetivo entender el contexto organizacional (entendimiento profundo de la organización) y fundamentar los ¿por qué? que conducen a los requisitos del sistema, antes que contar con una especificación detallada de lo que el sistema deberá hacer. Se basa en actividades que consideran ¿cómo el sistema a desarrollar podrá satisfacer las metas de la organización?, ¿por qué se necesita el sistema?, ¿qué alternativas existen?, ¿cuáles son las implicaciones de las alternativas para las partes interesadas? y ¿cómo pueden abordarse los intereses de las partes involucradas?. El estudio del contexto organizacional en el que se implantará el sistema ha sido reconocido como una parte fundamental de la ingeniería de requisitos debido a que se buscan mecanismos que permitan establecer la relación entre la funcionalidad esperada de un sistema de software y los procesos organizacionales a los que éste dará soporte.
Metodologías
Mediante la puesta en marcha de esta etapa, se reduce la brecha conceptual entre lo que el sistema debe hacer y por qué, y lo que los usuarios que interactúan con el sistema deben hacer y por qué, proporcionando así (en parte) la flexibilidad adicional necesaria para hacer frente a la complejidad de los sistemas de software actuales. El conocimiento obtenido de la etapa de análisis de requisitos tempranos puede ser representado mediante el uso de técnicas de modelo organizacional. El Framework i* [1] (i estrella) es una de las técnicas de modelado organizacional mejor fundamentada y utilizada que hace uso de relaciones estratégicas para modelar el contexto social e intencional de una organización y proporciona un lenguaje que soporta la descripción de redes organizacionales formadas de actores sociales con libertad de acción, pero que también dependen de otros actores para alcanzar sus objetivos y metas. Además de técnicas de modelado, se han propuesto metodologías que ofrecen enfoques para relacionar los conceptos del dominio de la organización (modelos organizacionales) a los correspondientes 40
“El aumento de la complejidad de los sistemas de
software conlleva a la necesidad de evolucionar las técnicas del análisis de requisitos y del desarrollo de software en sí.”
conceptos del dominio de la solución (modelos conceptuales, como diagramas de clases de UML, ontologías) de manera que se mapeen correctamente las necesidades de la organización con las funcionalidades a cubrir por el sistema. Estas metodologías propician la unión del modelado organizacional con las especificaciones de software mejorando el proceso de desarrollo. Por ejemplo: • Tropos [2] es una metodología para el desarrollo de sistemas orientados a agentes basada en i*. Se enfoca particularmente en el análisis del ambiente en el que operará el sistema a desarrollar, apoyándose en la idea de construir un modelo del ambiente organizacional y del sistema. La metodología guía la construcción de un modelo conceptual, mismo que es refinado y extendido durante las distintas etapas de desarrollo, desde la etapa de requisitos tempranos hasta la implementación.
En conclusión, el desarrollo de software ha pasado de ser una actividad solamente de los analistas de requisitos de sistemas a ser un trabajo en conjunto con los analistas organizacionales y los usuarios y operadores de los sistemas mismos. Esta práctica se encuentra en aumento, gracias a las ventajas que ofrece en el ámbito de análisis de requisitos, como la generación de especificaciones coherentes y sin ambigüedades o contradicciones que reflejan las necesidades de la organización.
››Por Karen Mariel Nájera Hernández
Referencias: [1] Eric S.-K. Yu, “Modelling strategic relationships for process reengineering,” Ph.D. dissertation, University of Toronto, Toronto, Ont., Canada, 1996. [2] P. Bresciani, A. Perini, P. Giorgini, F. Giunchiglia, and J. Mylopoulos, “Tropos: An agent oriented software development methodology,” Autonomous Agents and Multi-Agent Systems, vol. 8, no. 3, pp. 203–236, 2004. [3] Alicia Martinez, “Conceptual Schemas Generation from Organizational Models in an Automatic Software Production Process” Ph.D. dissertation, Valencia University of Technology, Valencia, Spain, 2008. [4] Karen Najera, Anna Perini, Alicia Martinez, Hugo Estrada. “Supporting i* model integration through an ontologybased approach”. In fifth international i* workshop (iStar’11), ser. LNCS, 2011, pp. 43–48. August, 2011. [5] SemanticWebBuilder. http://www.semanticwebbuilder.org.mx/
www.sg.com.mx |
• TAGOOn [4] es una metodología basada en una herramienta de software que permite la transformación automática de modelos organizacionales en ontologías organizacionales mismas que pueden ser adaptadas a plataformas de desarrollo de software automático como SemanticWebBuilder [5], una plataforma para la generación automática de aplicaciones y portales web semánticos a partir de modelos ontológicos desarrollada en INFOTEC (Centro de Investigación en TICs del CONACYT).
Software Guru
• Conceptual Schemas Generation from Organizational Models in an Automatic Software Production Process [3] es una metodología para la construcción de modelos conceptuales (casos de uso y diagramas de clases UML) a partir de modelos organizacionales representados con Tropos. Presenta un proceso de desarrollo de software automático mediante el uso del OO-Method (un método de producción de software que genera automáticamente un sistema orientado a objetos completo a partir de modelos de casos de uso y diagramas de clases UML).
.PRÁCTICAS Programación
Visualización de Programas Utilizando Técnicas Orientadas a Aspectos
›› Por Juan Alberto Hernández Martínez y Ulises Juárez Martínez
L
a programación siempre ha requerido de un nivel de análisis demasiado alto sin importar el paradigma sobre el cual se trabaja, siendo la estructura de datos una de las áreas que más complejidad demandan, es muy difícil en la mayoría de los casos el saber con exactitud lo que realiza cada algoritmo. Este problema afecta en gran medida al aprendizaje de alumnos, por lo que debemos considerar que es importante darle una óptima solución. La Visualización de Programas aborda en gran parte este tipo de situaciones tratando de hacer visible el funcionamiento de un programa dado, sin embargo, la forma en cómo se desarrollan las herramientas que pueden dar una solución no es la mejor.
El por qué de la Visualización de Programas
Si bien la programación implica un alto nivel de abstracción sin importar el paradigma sobre el cual se trabaja, una buena alternativa para lograr esa comprensión del funcionamiento de algoritmos es la Visualización de programas. En demasiadas ocasiones, el usuario dedicado a la programación se enfrenta a pequeños, medianos y grandes códigos, los cuales cuentan con un grado de complejidad bastante considerable, algunas veces se puede saber claramente cuál es toda la serie de pasos que se siguen para que el resultado devuelto por el mismo sea el correcto, pero ¿Qué sucede cuando el usuario necesita saber el funcionamiento de algoritmos que implican recursividad o estructura de datos?, lo más probable es que sea demasiado complejo saber a ciencia cierta qué hace el programa cada vez que se ejecuta y por consecuencia no se tenga la total seguridad de entenderlo. Dadas estas situaciones, la Visualización de Programas funge como área auxiliar a dichas problemáticas, sirviendo en muchas ocasiones como un aspecto importante en términos educacionales dado que permiten al usuario entender de manera clara programas complejos.
¿Cómo funciona?
La Visualización de Programas presenta vistas del código fuente del programa y de las estructuras de datos. La visualización estática del programa realiza un análisis del texto del mismo y provee la información que es válida para todas las ejecuciones independientemente de su entrada. Los sistemas de Visualización de Progra-
mas emplean editores sintácticos u optimizadores de código que producen un mejoramiento de la impresión, como indentación, diferencias de colores entre palabras reservadas y otros identificadores, la representación gráfica de la estructura del programa y de los datos, pero, no pueden explicar la conducta del programa ya que esto depende de los datos de entrada además del código mismo. Una representación dinámica del programa provee información acerca de la ejecución de un programa específico sobre un conjunto de datos de entrada. Se puede realizar, por ejemplo, destacando las líneas de código fuente cuando estas están siendo ejecutadas, estableciendo la pila de invocaciones de procesos y mostrando cómo los valores de los datos cambian mientras el programa se está ejecutando [1]. Algunas herramientas enfocadas en la Visualización de Programas: • En la XV JENUI en Barcelona “Animación Automatizada de Técnicas de Diseño de Algoritmos” [2] se da a conocer la aplicación SRec la cual aporta varias vistas complementarias sobre la ejecución de programas recursivos. La aplicación cuenta con múltiples opciones y facilidades educativas que convierten su manejo en una actividad sencilla e intuitiva, minimizando su tiempo de implantación y aprendizaje, lo cual facilita la labor docente de manera notable. • En la Universidad de La Laguna Tenerife en 2009 [3] se presenta a EDApplets, una aplicación web orientada a la enseñanza/aprendizaje de la programación y de la algorítmica en las ingenierías. Basada en la tecnología de Applets Java, está orientada a la animación y visualización mediante trazas de algoritmos y estructuras de datos. La herramienta permite cubrir diversos aspectos en una enseñanza que está dirigida a distintos tipos de estilos de aprendizaje: activo/ reflexivo, metódico/intuitivo, visual/oral, etc. • En la revista de Informática Educativa y Medios Audiovisuales [4] se presenta el sistema de visualización de programas VisualProg, el cual consta de tres funcionalidades principales: edición, ejecución y animación de programas escritos en Sucel, un lenguaje sencillo con similitud al estilo de programación C/C++/Java. • En Nueva York durante el 2009 [5] se presenta un ambiente de programación gráfico interactivo para Windows, el cual es llamado Alice, .BIO
Juan Alberto Hernández Martínez estudio en el Instituto Tecnológico de Orizaba la carrera de Ingeniería en Sistemas Computacionales con especialidad en Ingeniería de Software. Actualmente se desempeña como estudiante de la Maestría en Sistemas Computacionales en el Instituto Tecnológico de Orizaba - División de Estudios de Posgrado e Investigación, enfocado en el área de Visualización de Programas, Estructura de Datos y Programación Orientada a Aspectos. unmasked_00@acm.org
42
.PRÁCTICAS
Programación
“…una buena opción para mejorar el entendimiento de algoritmos…”
Cuando se habla de Visualización de Programas inmediatamente se asocia con los depuradores, causando en la mayoría de las ocasiones mucha confusión y sobre todo una mala definición acerca del área mencionada. Este tipo de confusiones se presenta principalmente por la cercanía que existe entre la Visualización de Programas y la Depuración, sin embargo ambas áreas tienen un objetivo bastante diferente. El principal objetivo de la Depuración es eliminar los errores de los programas, en general, la Depuración es un proceso que busca detectar, diagnosticar y corregir los errores en un programa dado. La depuración permite mostrar el valor que toma en determinado momento una variable dentro de un código específico, sin embargo, no está planteado para enseñar al usuario y dar la posibilidad de que obtenga un conocimiento general del funcionamiento de un algoritmo, simplemente muestra información en puntos específicos para posteriormente corregirlos en caso de ser necesario. Ejemplificando lo anterior, podríamos suponer un código que permita ordenar un arreglo de números, en términos de Visualización de Programas, visualizar al usuario toda una traza de resultados intermedios en cada iteración durante la ejecución del programa es una de las alternativas, de esta manera el usuario puede ver cómo y cuál fue el cambio de valor en cada iteración para las variables involucradas dentro del código desde el inicio de la ejecución hasta su final. Si la ordenación es un éxito o no, eso es algo que la visualización no puede solucionar dado que su principal objetivo es mostrar el funcionamiento de un algoritmo en ejecución. Retomando el mismo ejemplo en términos de Depuración la situación es diferente, una vez que sabemos que nuestro programa ordena mal los números, se indica cierto punto dentro de nuestro código para ver si es ahí donde posiblemente se hacen mal las cosas, pero en ningún momento nos hemos percatado de cuál es el funcionamiento del código, simplemente estamos intentando reparar algo que está mal. He aquí una notable diferencia entre ambas áreas, y es por este detalle que un depurador no es considerado una herramienta que visualice programas.
La POA es un paradigma que posibilita la separación de asuntos y proporciona una clara vía para encapsular funcionalidad entrecruzada, la cual hace a los programas más difíciles de leer, mantener, entender y reutilizar. La lógica detrás de la POA es que los sistemas informáticos son programados mejor por separado especificando e implementando los variados aspectos del sistema y una descripción de sus relaciones. Los mecanismos en el ambiente subyacente de la POA son los responsables de tejer o componer los diferentes aspectos en un programa coherente. Los aspectos pueden extenderse desde conceptos de alto nivel como seguridad y calidad del servicio hasta conceptos de bajo nivel como autenticación, entre otros. Pueden ser funcionales, como características o reglas de negocio, o no funcionales, como sincronización y manejo de transacciones [6]. Entre las ventajas que presenta dicho paradigma se encuentran las siguientes [7]: • Un código menos enmarañado, más natural y más reducido. • Una mayor facilidad para razonar sobre los conceptos, ya que están separados y tienen una dependencia mínima. • Más facilidad para depurar y hacer modificaciones en el código. • Se consigue que un conjunto grande de modificaciones en la definición de un concepto tenga un impacto mínimo en las otras. • Se tiene un código más reutilizable para acoplarlo y desacoplarlo cuando sea necesario.
Aportación de la POA en términos de Visualización de Programas
Para visualizar un programa se necesita un código fuente a visualizar y un código que permita mostrar la visualización del algoritmo al usuario. Retomando el ejemplo del ordenamiento de un arreglo de números, imaginemos que necesitamos visualizar el funcionamiento de nuestro código en una ventana de SWING. Ya tenemos nuestro código fuente que se encarga de ordenar un arreglo de números y el cual queremos visualizar, además ya contamos con un código que muestra tanto la ventana de SWING, como realiza las operaciones para poder visualizar la información en la misma. .BIO
Ulises Juárez Martínez obtuvo su grado de maestría en Ingeniería Eléctrica en el CINVESTAV IPN y su doctorado en Ingeniería Eléctrica en el CINVESTAV IPN desarrollando un framework para Programación Orientada a Aspectos de Grano Fino. Actualmente es profesor de investigación en el grupo de ingeniería de software en el Instituto Tecnológico de Orizaba, México. ujuarez@itorizaba.edu.mx
43
Software Guru
Un depurador no es un visualizador de programas
Programación Orientada a Aspectos (POA)
www.sg.com.mx |
ofrece una completa secuencia de comandos y ambiente de prototipos para el comportamiento de objetos 3D. Soporta recursividad como medio para crear animaciones más poderosas con acciones repetidas que acercan al usuario cada vez más a una tarea completa.
.PRÁCTICAS Programación
Este último realiza dos operaciones: crear la ventana y visualizar el funcionamiento del programa, dicho de esta manera claramente se aprecia que el código se encuentra mezclado, si necesitáramos cambiar algunas sentencias resultaría difícil el mantenimiento del mismo, si se quisiera agregar alguna nueva funcionalidad probablemente se tenga que cambiar gran parte del mismo, dado que solamente fue realizado para un código en especial por lo que reutilizarlo sería muy complicado. Problemas de este tipo son los que tienen solución gracias a las ventajas que la POA proporciona pues nos permite separar todas esas funcionalidades en códigos totalmente ajenos unos con otros, dejando más claro y entendible el programa, con mayor reutilización, y mayor capacidad de mantenimiento.
Caso de estudio
Visualización del programa encargado de ordenar un arreglo de números mediante el método Bubble. Para ilustrar el ejemplo mencionado con anterioridad presentamos lo siguiente: Se tiene una clase en este caso llamada Bubble, la cual contiene un método bubbleSort(int[] arreglo) que recibe como parámetro un arreglo de enteros y cuya función es ordenarlo. 01 public class Bubble { 02 public static int[] bubbleSort(int[] arreglo){ 03 int almacen, i=0, j=0;
lblMensaje.setFont(tipoLetra); lblMensaje.setForeground(Color.black); btnBoton = new JButton(“Salir”); btnBoton.setFont(tipoLetra); btnBoton.addActionListener (new Cerrar()); panelPrincipal.add(lblMensaje,BorderLayout.NORTH); for(int i=0; i<vector.size();i++) panelPrincipal.add((JTextField)vector.elementAt(i)); panelPrincipal.add(btnBoton, BorderLayout.SOUTH); this.getContentPane().add(panelPrincipal); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle(“Traza del arreglo”); this.setSize(400,400); this.setLocation(200,200); this.setResizable(true); this.setVisible(true);
}
Dentro de esta misma clase VentanaDatosDos, sobresale otro fragmento de código que en conjunto con el anterior forman toda la clase, este segundo fragmento simplemente contiene sus métodos getTraza() y setTraza(String traza) para recibir la información que se visualizará en la ventana y un método llamado creaCaja() cuya función es crear un JTextField por cada línea de información recibida.
04 for(i = 0; i < arreglo.length; i++){ 05 for(j = 0; j < i; j++){
public void setTraza(String traza){
06 if(arreglo[i] < arreglo[j]){
this.traza = traza;
07 almacen = arreglo[j];
}
08 arreglo[j] = arreglo[i];
public String getTraza(){
09 arreglo[i] = almacen;
return this.traza;
10 }
}
11 }
public void creaCaja(){
12 }
JTextField txtDatos = new JTextField();
13 return arreglo;
txtDatos.setForeground(Color.black);
14 }
txtDatos.setFont(tipoLetra);
15 }
txtDatos.setText(this.getTraza()); vector.addElement(txtDatos);
Nuestra intención era visualizar toda la ejecución del programa desde su inicio hasta su fin en una ventana de SWING, para lo cual presentamos el código de la clase VentanaDatosDos, aquí simplemente se muestra el método inicializarComponentes() el cual se encarga de crear una ventana que en su parte superior contiene una etiqueta que por el momento no dice nada y en la parte inferior un botón con la leyenda Salir.
}
Lo siguiente que tenemos es una clase llamada Principal que simplemente realiza la ejecución del programa, dentro del método main solamente se envía el arreglo de números al método que se encarga de ordenarlo, en nuestro caso el bubbleSort. public class Principal {
public void inicializarComponentes(){
public static void main(String[]args){
panelPrincipal = new JPanel();
int arreglo[] = {3,7,2,5,9,4,12,1};
panelPrincipal.setLayout(new BoxLayout(panelPrincipal,BoxLayout.Y_AXIS));
int v[] = Bubble.bubbleSort(arreglo);
panelPrincipal.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
}
lblMensaje = new JLabel();
}
44
.PRÁCTICAS
Programación
Hasta este momento cada clase tiene su propia funcionalidad, la primera es ordenar un arreglo de números, la segunda es crear una ventana en SWING y la tercera es ejecutar el programa. La parte interesante está dada a continuación, para lo cual tenemos lo siguiente: Se ha realizado una clase llamada BubbleAspectMediator que se encargará de realizar la visualización, lo importante es que las técnicas utilizadas dentro de ella están orientadas a aspectos, este pequeño código localiza puntos estratégicos de la clase Bubble para que cuando se ejecute el método bubbleSort(int[] arreglo) inmediatamente recupere la información que nos permita ver cómo van cambiando los valores del arreglo en cada iteración de inicio a fin y de esta manera enviarla a la clase que se encargará de crear la ventana en SWING. public class BubbleAspectMediator extends Aspect{ Pointcut corteTraza2 = new Lines(“Bubble”,”{6,13};”); String mensajeTraza2 = “VentanaDatosDos.capturaTraza(java.util.Arrays. toString(arreglo));”; Advice avisoTraza2 = new After(mensajeTraza2); Pointcut corteEjecucion2 = new Execution(“int[] Bubble.bubbleSort(int[])”); String bodyEjecucion2 = “VentanaDatosDos.visualizaPantalla();”;
El resultado es el siguiente: Lo que se ha logrado con todo esto es mantener cada código separado uno del otro de acuerdo a su funcionalidad, de esta manera obtenemos una gran limpieza entre ellos, un mejor entendimiento, mayor capacidad de reutilización y así evitamos los problemas típicos a la hora de desarrollar aplicaciones.
Conclusión
La Visualización de Programas es una muy buena opción para satisfacer las necesidades de entendimiento y comprensión de algoritmos, disminuyendo considerablemente el nivel de análisis, haciéndolos mucho más fácil de entender, lo cual resulta muy difícil de realizar a simple vista debido a la complejidad que actualmente tiene la programación sin importar el paradigma sobre el cual se trabaja. Tanto la Visualización de Programas como la Programación Orientada a Aspectos mantienen un punto en común y es el darle al usuario la posibilidad de tener una mejor comprensión de lo que realiza, mientras que la primera en mención lo realiza por medios visuales la segunda lo logra con la limpieza que se tiene al mantener las funcionalidades en códigos separados.
Advice avisoEjecucion2 = new After(bodyEjecucion2); Intertype campo2 = new Field(“VentanaDatosDos”, “public static String cadena=\”\”;”); String nuevoMetodo = “public static void capturaTraza(String contenido){“ + Intertype metodoCapturaTraza2 = new Method(“VentanaDatosDos”, nuevoMetodo); String nuevoMetodo2 = “public static void visualizaPantalla(){“ + “v.inicializarComponentes();” + “}”; Intertype metodoVisualiza2 = new Method(“VentanaDatosDos”,nuevoMetodo2);
Referencias:
public void weaving(){ intertyping(campo2,metodoCapturaTraza2,metodoVisualiza2);
[1] Moroni, Norma & Señas, Perla. “SVED: Sistema de Visualización de Algoritmos,”
advising(avisoTraza2,corteTraza2);
2002, laboratorio De Investigación y Desarrollo en Informática y Educación (LIDI-
advising(avisoEjecucion2,corteEjecucion2);
nE) B.A.
}
[2] Pérez, Antonio & Velázquez, Ángel. “Animación Automatizada de Técnicas de
}
Diseño de Algoritmos,” XV Jornadas de Enseñanza Universitaria de la Informática (JENUI), Julio 2009, Barcelona.
Este código tiene algunos elementos importantes y que son necesarios destacar para su entendimiento total:
[3] Almeida, Francisco, et al. “EDApplets: Una Herramienta Web para la Enseñanza de Estructuras de Datos y Técnicas Algorítmicas,” 2009, universidad de La Laguna Tenerife.
1. El código anterior está realizado mediante un framework llamado Énfasis, el cual está diseñado especialmente para programar extensiones orientadas a aspectos de baja granularidad, mediante este se pueden realizar cortes sobre variables locales, cortes sobre la estructura estática de las clases para agregar miembros e instrumentación de clases [8]. 2. Los elementos Pointcut indican las líneas en las cuales actuará el aspecto, para este código se indicaron tanto Lines(“Bubble”,”{6,13};”); y Execution(“int[] Bubble.bubbleSort(int[])”) 3. El elemento Intertype permite introducir nuevos campos a las clases, los cuales no fueron contemplados desde el inicio. 4. El método weaving() es el lugar donde se controla el aspecto con la clase correspondiente para la cual fue diseñado.
[4] Soler, Yolanda & Lezcano, Mateo. “Ambiente de ayuda al diseño de programas de computadoras y determinación de su eficiencia,” Revista de Informática Educativa y Medios Audiovisuales, 2009, vol. 6(13). [5] Dann, Wanda, et al. “Using Visualization to Teach Novices Recursion,” 6th Annual Conference on Innovation and Technology in Computer Science Education, 2001, new York,USA. [6] Elhaibe, Rodrigo. “Metodologías Ágiles y Programación Orientada a Aspectos, Estudio de una posible integración,” Noviembre 2006, Universidad de Morón, Buenos Aires Argentina. [7] Reina, Antonia. “Visión General de la Programación Orientada a Aspectos,” Diciembre 2000, facultad de Informática y Estadística Universidad de Sevilla. [8] Juárez, Ulises, “Énfasis: Programación Orientada a Aspectos de Grano Fino,” Ph.D. dissertation, CINVESTAV, Octubre 2008, México D.F.
45
www.sg.com.mx |
Software Guru
“v.setTraza(contenido);” + “v.creaCaja();” + “}”;
.PRÁCTICAS Gestión
Cómo me organicé durante el desarrollo de ›› Por Gabriel Ayuso
H
oy en día existen muchas metodologías, herramientas y tecnologías para administración de proyectos, productividad, organización, administración de tareas, administración de conocimiento, etc. Hay tanto de donde escoger que decidí compartir los “qué”, “cómo” y “porqué” de lo que usé para mantenerme organizado durante el desarrollo de PostWarden. Por el momento sólo digamos que involucra GTD (Getting Things Done), Pomodoro, Things para Mac, cuadernos Moleskine, Notational Velocity, Dropbox y TiddlyWiki.
PostWarden
Uso la etiqueta #CAPTURADO para saber que ya digitalicé ese apunte. De esta forma, dándole un vistazo rápido a mis apuntes me doy cuenta de cuales apuntes todavía necesitan ser digitalizados.
uno de entrada a entrada. Cuando le das click a un vínculo wiki, la nueva entrada aparece debajo de la entrada actual. Es una manera bella y elegante de mantener tu conocimiento a la mano.
Figura 1. Apunte con Etiquetas.
Figura 3. TiddlyWiki.
El coctel de metodologías Hay varias metodologías de productividad, he leído mucho sobre ellas y decidí preparar mi propio coctel con un poco de cada una. Si mezclas GTD con Pomodoro y un poco de métodos minimalistas como The Power of Less, obtendrás algo similar a lo que yo uso. Primero divido tareas en pequeños ítems “accionables”, organizo tareas en proyectos, manteniendo listas, a la GDT, de tareas por hacer algún día y listas de próximas tareas. Cada día selecciono un grupo de tareas y las realizo una por una durante el día, manteniendo todo mi enfoque en la tarea actual. En otras palabras, soy un singletasker como recomienda Leo Babauta en “The Power of Less”.
Capturando con cuadernos Moleskine Para mí, pluma y papel son la mejor forma de capturar ideas y listas de tareas pendientes. Para ayudarme con esto, compré dos sets de cuadernos Moleskine Volant; un set de papel blanco para bosquejos y garabatos, y un set de papel con rayas para notas, ideas y listas de tareas pendientes. Ideé una manera estándar para escribir entradas en el cuaderno de rayas. La forma en la que lo hago es bastante sencilla: En la primera línea etiqueto el apunte con #Nota, #Idea o #Por-Hacer para saber el tipo de apunte del cual se trata. Debajo escribo el contenido del apunte y delimito cada entrada con una línea. También uso otras etiquetas para darle contexto al apunte, por ejemplo: agrego la etiqueta #PostWarden a todos mis apuntes que tengan que ver con PostWarden.
Figura 2. Bosquejos y garabatos.
Ideas y notas en Notational Velocity + Dropbox No puedo dejar mis notas en los cuadernos Moleskine ya que no son buscables, respaldables ni accesibles en cualquier lugar. Notational Velocity es una aplicación para Mac que sincroniza archivos de texto con Dropbox. Su capacidad de búsqueda también es muy útil si tienes muchas notas. Si quiero ver las notas en donde sea, lo hago usando WriteRoom para iPhone o iPad ya que también se sincroniza con Dropbox. No hay nada como tener todas tus notas e ideas disponibles en donde estés y que cualquier aplicación que pueda leer archivos de texto las pueda abrir. ¡Incluso las puedo abrir en Notepad.exe!
Mi wiki personal con TiddlyWiki TiddlyWiki es un wiki personal brillante, el cual consta de un archivo de HTML y un applet de Java. ¡No requiere un servidor! Yo guardo mi wiki en Dropbox para poder abrirlo donde quiera. Como es sólo un archivo con HTML, CSS y Javascript, no hay tiempos de carga y no salta
Yo almaceno documentación técnica, snippets, guías, tips, ejemplos y demás en mi TiddlyWiki. En vez de agregar una página de StackOverflow a mis favoritos o buscar en Google cada vez, agrego una entrada en mi TiddlyWiki con esa información. En vez de tratar de recordar cómo resolver un problema, agrego una entrada. Para hacerlo todavía más útil, uso Fluid.app, el cual te permite que tu TiddlyWiki sea accesible desde la barra de menú de tu Mac.
¿Cómo uso Things para Mac? Things es una aplicación muy simple pero poderosa para productividad y listas de tareas pendientes. Fue diseñada basada en la metodología GTD pero puedes configurarla para usarla como tú gustes. El problema con esto es que si no la configuras de una forma adecuada, puede ser un desastre.
Áreas de Responsabilidad y Proyectos Uso un Área de Responsabilidad de Things por cada proyecto: PostWarden es un Área de Responsabilidad. Cada tarea que requiere más de una acción para ser realizada en un Proyecto de Things. “Implementar Offline Drafts” fue un proyecto, “arreglar fugas de memoria” fue otro proyecto, etc. Tareas individuales pueden ir dentro de Áreas de Responsabilidad o Proyectos. Los proyectos consisten de una lista de todas las tareas que deben de ser realizadas para terminar el proyecto. “Implementar Offline Drafts” 46
.PRÁCTICAS Gestión es un ser orgánico: crece, se reproduce y muere.”
Etiquetas, etiquetas y más etiquetas Una de las cosas más importante que puedes utilizar en Things son etiquetas. Es muy importante que prepares un set estándar que usarás todo el tiempo. Si no haces esto, terminarás administrando tus etiquetas más que tus tareas.
dos de Pomodoro para hacer estimaciones. Un pomodoro es básicamente un intervalo de 30min de trabajo. Una tarea usualmente debe de tomar entre menos de un pomodoro hasta cuatro pomodoros. Si una tarea se tardara más en ser realizada, es mejor convertirla en proyecto y dividirla en tareas más pequeñas. La etiqueta “tipo” la uso para darme una idea del tipo de trabajo requiere la tarea o proyecto. De esta manera puedo encontrar fácilmente todos los bugs o todos los cambios de la interfaz gráfica, etc. También añadí la etiqueta “feedback” para ayudarme a identificar tareas relacionadas con retroalimentación recibida de usuarios.
Hoy, Siguiente, Programado y Algún día
Figura 4. Etiquetas en Things.
Las divido en tres grupos: importancia, tiempo y tipo. La Importancia también puede ser entendida como prioridad. Usar prioridades numéricas o “alto”, “mediano” y “bajo” puede ser muy confuso para mí. Por eso uso palabras como “debo”, “debería” y “podría” para diferenciar entre cosas que debo, debería o podría hacer. Me gusta usar palabras que implican acción. Básicamente tareas que serán parte de la siguiente versión del programa va en “debo”, tareas que serán parte de una versión futura va en “debería”, y tareas que son más que nada ideas o cosas no muy importantes van en “podría”. Lo más vital de esta etiqueta es que se revise con frecuencia porque los proyectos y tareas cambian de importancia constantemente. Para saber las tareas que puedo realizar en determinado momento decidí usar los méto-
Things separa todos los proyectos y tareas en base a cuando deberían realizarse. Algo muy importante es agregar todo a “algún día” primero, si no haces esto, la lista siguiente crecerá tanto que se volverá demasiado abrumadora. Para mí, “algún día” es un día bonito, significa que la tarea debe ser realizada pero (por ahora) no importa cuando. La tarea está capturada y me puedo olvidar de ella. También me puedo olvidar de una tarea si la programo para una fecha futura. Las tareas programadas son suficientemente importantes que quiero que Things me recuerde de ellas otro día. Como es de esperarse, esto también funciona bien para tareas con fecha límite. En la lista “siguiente” pongo las tareas que voy a realizar en los siguientes días. En el caso de PostWarden, sólo las tareas que serán parte de la siguiente versión van aquí. También añado los proyectos que toman mucho tiempo y deben de ser empezadas de una vez aunque no son parte de las siguiente versión. Al menos de que haya algo que realmente tengo que hacer hoy, rara vez uso la lista “hoy”. Usualmente voy trabajando en las tareas etiquetadas como “siguiente” de una en una hasta que termine.
Todo va junto al final Una tarea es un ser orgánico: crece, se reproduce y muere. No puedes mantener una lista
de tareas sin revisarla porque se volvería un caos. Debes de revisar las etiquetas y estados de cada tarea constantemente. Algunas tareas que crees que “debes hacer” podrán convertirse en tareas que sólo “deberías hacer” o tareas que ya no tienen que ser hechas. Lo más probable es que sigas agregando más tareas a tus proyectos porque no pensaste en ciertas cosas de antemano. Cuando terminas con las tareas en “siguiente”, deberías de revisar las tareas de “algún día” para encontrar cuales pueden ser movidas a “siguiente”. Cada vez que reviso mis tareas (usualmente una vez a la semana), reviso lista por lista limpiando cada una. Reviso la importancia de cada tarea asegurándome de haber creado tareas en base a mis apuntes, borro tareas obsoletas y me aseguro de no tener tareas duplicadas, también creo tareas para los proyectos que le faltan tareas.
Software Guru
consistió de 24 tareas como: “Habilitar autoguardado de offline drafts en el compositor de posts” y “Deshabitar validación de datos requeridos al guardar offline drafts”.
Figura 5. Proyectos y tareas en Things.
Así es como Things funciona para mí, si pruebas este método, espero que te sirva también.
Conclusiones Hay tantas maneras de organizarte y tantas personas que se dedican a inventar nuevas formas y nuevas herramientas, que puede ser abrumador. Al buscar herramientas es preferible que uses una que te permita exportar tus datos o al menos extraerlos fácilmente con un script. No pierdas tu tiempo probando todo lo que encuentres. Es bueno experimentar pero usa lo que te funcione y hazle ajustes cuando sea necesario. Al final del día, lo que importa es que estés cómodo y seas libre para hacer el trabajo que quieres hacer, además de poderlo hacer bien. .BIO
Grabriel Ayuso, se unió a Nero en Alemania como Online Services Software Engineer tras recibir su título de Ingenieron en Sistemas del TEC Campus Guadalajara. Tres años después desarrolló PostWarden para Mac y es Lead Cloud Software Engineer de Nero en Los Angeles. http://gabrielayuso.com
47
www.sg.com.mx |
“Una tarea
.COLUMNA Columna Invitada
Los Efectos del Software
Q
uienes usamos y compartimos la idea del software libre y abierto, nos topamos con quienes simplemente no entienden cómo es que podamos “regalar” nuestro trabajo. Es una cuestión de creer en que la idea es correcta y “regalar” el trabajo (asunto que estrictamente pudiese ser cierto), no es tan lamentable ni grave como a más de uno le pudiese parecer. De hecho, Donald Knuth, una de las ‘vacas sagradas’ del cómputo ha dicho ya en alguna ocasión que todos estamos obligados a hacer os programadores algo por nuestras comunidades, por el lugar donde vivimos. Los programapueden donar su dores pueden donar su código y eso es una manera de agradecer los beneficios código y eso es recibidos en nuestras existencias. Cada quien, desde su guarida, está obligado a una manera de agra hacer de este mundo algo mejor. Knuth es el primero en aplicar esta idea y su decer los beneficios sistema de tipografía TeX, es libre y gratuito. Es de código abierto y en la actuarecibidos en nuestras lidad sigue siendo el estándar en sistemas de tipografía para libros de matemáticas. existencias TeX tiene ya sus años y se ha desarrollado extraordinariamente con una serie de herramientas para quienes tienen que formar libros científicos. Así pues, aparte de la obra maestra de Knuth (The Art of Computer Programming - una serie de libros sobre cómputo), tenemos a TeX, entre tantas cosas que ha hecho este personaje por el cómputo mundial.
››“L
-
.”
En el software libre, abierto, en donde en general incluso se entrega el código fuente, tenemos la posibilidad de aprender de lo que otros ya han hecho
Manuel López Michelone (La Morsa). Físico por la UNAM y Maestro en Ciencias por la Universidad de Essex en el tema Inteligencia Artificial. Columnista por muchos años en publicaciones de la industria del cómputo y ávido programador. Su Twitter: @morsa y su correo morsa@ la-morsa.com
Esto me hace pensar en el ajedrez: gracias a quienes escriben de las partidas de otros, que las analizan, que hacen colecciones de posiciones de táctica, de ejercicios para mejorar en nuestra comprensión ajedrecística, entonces aprendemos. No tiene sentido pretender inventar el hilo negro, aprender todo desde cero, sin ayuda. No nos alcanzaría una vida en ese sentido. Hay que sacar ventaja de que otros ya han hecho el trabajo y se han tomado la molestia de explicarnos muchas cosas que nos permiten avanzar más rápidamente. Leyendo a Frederic Friedel, de la empresa alemana Chessbase (dedicada a la venta de programas informáticos, bases de partidas, monografías de aperturas, todo lo relacionado con el ajedrez computarizado), que en una entrevista dice que los programas de ajedrez de código abierto han arruinado este negocio del ajedrez cibernético. El problema es que hay una serie de motores de ajedrez, “engines”, los cuales juegan tan bien como los comerciales: Fritz, Rybka, Shredder, etc. Por ello en
Libre
la versión 13 de Fritz, Chessbase ha añadido el que se pueda interactuar con análisis de otros a través de la “nube”, es decir, a través de análisis realizados por otros y guardado en los servidores públicos de Chessbase. Para ello, cabe decirlo, se necesita comprar Fritz 13 para tener acceso a esta opción. El problema es que Robbolito, Houdini y StockFish, entre otros, son programas que juegan ya tan bien como Rybka que de acuerdo a Garry Kasparov (probablemente el mejor jugador de todos los tiempos), a finales del 2010 era el programa que mejor entendía de ajedrez. Ahora simplemente se puede descargar cualquiera de los programas mencionados y si comparamos análisis contra los motores comerciales, no veremos prácticamente diferencia. Quizás Friedel tiene razón: vender motores y programas de ajedrez ya no parece ser un buen negocio. Pero pensemos en Chessbase, el producto estrella de dicha empresa, el manejador de partidas de ajedrez el cual es un estándar. Hay varios productos de la competencia, algunos comerciales, y otros de software libre y abierto. Chess Assistant, quien compite comercialmente con Chessbase, hace estrictamente lo mismo que éste (y viceversa), es cuestión de gustos y de tiempo el preferir uno u otro programa. Sin embargo, tenemos “José” (por José Raúl Capablanca) y Scid (Shane’s Chess Information Database), que son programas que en términos generales hacen lo mismo que Chessbase o Chess Assistant, sin embargo, no tienen el éxito de los programas comerciales. ¿Por qué? Puede haber muchas razones, pero quizás la más común es que Chessbase y Chess Assistant también entregan una serie de programas de apoyo para sus manejadores de partidas. Tienen servicios de recolección de partidas que se juegan en los torneos y sus bases de información están actualizadas al día. Los programas públicos, libres y gratuitos tienen eso en contra y no pueden competir con esta parte de los programas comerciales. Otra razón es que sus bases de partidas están en general en un formato optimizado para búsquedas, el cual es propietario, mientras que los programas abiertos usan el formato PGN (Portable Game Notation), que probablemente sea mucho más lento de manipular cuando se tienen ya más de cinco millones de partidas con todo el ajedrez registrado. Así pues, he aquí lo que hay que hacer para mantener un negocio de software a flote: hay que dar mucho más que solamente un programa funcional. Por eso Chessbase y Chess Assistant se mantienen en el gusto de los ajedrecistas. Con ese mismo criterio el negocio de los programas que juegan ajedrez debe buscar dar más que sólo un programa que juegue al ajedrez. Como se mencionó antes, Fritz 13 es un primer paso en ese derrotero, pero es claro que hay que apresurarse porque los programas abiertos y gratuitos hacen tanto como los comerciales. ¿Por qué pagar por algo que se puede conseguir gratis?
››Por Manuel López Michelone 48
.CONTENIDO PATROCINADO
Rompiendo las Barreras
entre Desarrollo y Pruebas
lo largo del tiempo, la Disciplina de Pruebas ha evolucionado de ser un valor agregado a una actividad preponderante dentro de los Ciclos de Desarrollo de Software. Hoy por hoy Desarrolladores y Testers trabajan en equipos que, aunque están relacionados, viven divididos; con frecuencia cuando se trabaja en el mismo producto pero con administraciones separadas, los 2 equipos trabajan aislados uno del otro y con poca comunicación cuando los problemas se descubren. El resultado es una calidad de código pobre que depende del desarrollador individual y conlleva una alta tasa de defectos escurridizos, regresiones frecuentes y problemas de desempeño. Por otra parte, los defectos registrados a menudo son difíciles de reproducir debido a la escasa documentación. Además, la alta complejidad del entorno empresarial típico de los Desarrolladores los lleva a asumir que los Testers configuraron incorrectamente el software o cometieron algún otro tipo de error que “anula” el defecto reportado. Entre otras cosas esto produce un juego de “Ping Pong” donde los defectos primero son abiertos, luego rechazados, y finalmente vueltos a abrir, rebotando de ida y vuelta entre Pruebas y Desarrollo. Lo anterior es sólo un ejemplo de la problemática que nos encontramos dentro de la disciplina de pruebas, lo cual nos confirma el porqué de la importancia y necesidad de una herramienta integral. Hoy en día existen diferentes competidores que proveen soluciones para esta disciplina, y Microsoft comienza a despuntar con el Visual Studio Test Professional 2010 - VSTP (también conocido como Microsoft Test Manager - MTM). Esta solución nos ayuda a englobar el análisis a lo largo de las líneas de la implementación del “ciclo de vida”, incluyendo el proceso de desarrollo / pruebas, la gestión de las liberaciones y la puesta en producción, todo esto aplicable no sólo a plataformas Microsoft sino también a otras como lo puede ser Java. Dentro de los beneficios que podemos encontrar al implementar VSTP 2010 tenemos los siguientes:
Ahora es momento de hablar de algunas de las características de VSTP 2010:
• Reducción de Tiempo (Tanto de Diseño como de Ejecución de Pruebas). • Trazabilidad (Relacionar los Requerimientos con las Baterías de Pruebas). • Reportes (Dar certeza y claridad del grado de calidad del sistema objetivo de prueba). • Reducción en los ciclos de desarrollo y pruebas en un 28% del tiempo promedio, dando como resultado un 14% de reducción en el tiempo promedio en los ciclos de liberación a producción… ¡Mejor colaboración entre Developers y Testers! • Casi el doble (91% de incremento), en el número de defectos encontrados y solucionados por ciclo de desarrollo. • 11% de reducción promedio en la cantidad de parches y mantenimientos en las liberaciones.
• Test Impact Analysis, con el cual se ayuda a determinar los casos de prueba asociados al código que fue modificado, marcándolos para ejecutarse de nuevo (Priorización de Pruebas).
• Testing Center. Gestión de Pruebas, el cual tiene la capacidad de definir Planes de Prueba, Diseñar de Casos de Prueba (vinculados a requerimientos, diseño paso a paso, parametrizables y reutilizables), Ejecutar las Pruebas - Test Runner (ejecución paso a paso, acceso a resultados esperados, aprovechamiento de parámetros, vinculación a defectos, y “Accion Recordings”, con lo que es posible acelerar futuras ejecuciones de forma automática siendo muy fáciles de grabar), además de dar características para un correcto Levantamiento de defectos y Seguimiento (conocido como Bugs Accionables), y Reportes de Estatus.
• Visual Studio 2010 Load Test Feature Pack, el cual nos permite validar requerimientos no funcionales, como la capacidad de respuesta, el rendimiento, la estabilidad y la escalabilidad del sistema; así mismo, cuando se utiliza con el Analizador de Prueba de Carga, es posible visualizar gráficamente la respuesta del sistema durante una prueba de carga… ¡Ahora será posible liberar una solución con mayor confianza! • IntelliTrace, es una nueva característica que proporciona la información de debug (llamadas entre funciones, valor de las variables, excepciones o errores etc.) de los acontecimientos ocurridos durante la ejecución de una aplicación en ambiente de pruebas o producción, y ayuda al programador a depurar la aplicación con dichos valores para simular lo ocurrido y poder reproducir el error.
Finalmente, es importante mencionar que Microsoft junto con la Empresa Testing IT, están trabajando en diferentes iniciativas como el Testing Days, Consultoría, Implantación de Procesos y Herramientas, así como también Pruebas de Concepto; impulsando así, el Fascinante Mundo de las Pruebas de Software en nuestro país. ¡Hasta la Próxima! Equipo Microsoft & Testing IT 49
Software Guru
• Lab Center. Con el cual es posible la Gestión de Entornos (Físicos y Virtuales), entornos de prueba virtualizados y automatización del ciclo “Build-Deploy-Test”.
www.sg.com.mx |
A
.COLUMNA Programar es un Estilo de Vida
Los Juegos:
Clave para el Desarrollo del Cómputo
E
En el principio era el tiro parabólico.
l desarrollo de juegos está relacionado con el desarrollo del cómputo prácticamente desde sus inicios. A pesar de que durante décadas las computadoras estaban al alcance únicamente de algunas grandes (y muy serias) instituciones militares y académicas, ya desde la década de 1940 hubo acercamientos lúdicos a diversos temas con fines de investigación: En 1947, Thomas T. Goldsmith Jr. y Estle Ray Mann diseñaron un primitivo sistema controlado por una computadora de únicamente ocho bulbos que mostraba en una pantalla tipo televisión la trayectoria descrita por misiles, cuyos parámetros dependían de la posición de varias perillas. Este “juego” no implementaba lógica alguna de detección de colisiones, el usuario colocaba una plantilla con su objetivo sobre la pantalla. Y podríamos imaginar las hipotéticas discusiones de los niños acerca de si dio en el blanco o se pasó por poquito (son hipotéticas porque el sistema, si bien fue patentado con tal fin, nunca llegó al mercado). Este primer juego era prácticamente un desarrollo natural, si tomamos en cuenta que las primeras computadoras electrónicas funcionales fueron creadas durante la segunda guerra mundial precisamente para hacer cálculos de trayectorias balísticas. Pero no deja de llamar la atención que uno de los juegos que más se asocia con el éxito de las aplicaciones en plataformas móviles, Angry Birds de la compañía finlandesa Rovio Mobile (comercializado en 2009 — ¡60 años más tarde!) sigue siendo básicamente un juego de tiro parabólico, aderezado con elementos gráficos y humorísticos además de un sinfín de nuevos niveles y actualizaciones.
¡Y en Cambridge se juega así!
Gunnar Wolf es administrador de sistemas para el Instituto de Investigaciones Económicas de la UNAM y desarrollador del proyecto Debian GNU/Linux. http://gwolf.org
Pocos años más tarde, en 1952, Alexander S. Douglas escribió una versión gráfica del juego del gato (muy atinadamente llamada OXO) como proyecto para su tesis doctoral de interacción hombre-máquina en la Universidad de Cambridge, en una época en que no existían aún los dispositivos de entrada y salida (teclados y pantallas) que hoy damos tan por sentado. Para 1959 aparecieron los primeros juegos gráficos en el MIT: Otra implementación del gato y el ratón en el laberinto. Estos juegos eran controlados por una pluma lumínica, con una forma de interacción, aunque salvando las distan-
cias que más de 40 años ponen en el medio, muy similar a la táctil, que se ha puesto de moda en dispositivos móviles.
Jaque al rey: Persiguiendo la inteligencia artificial
Otro de los grandes hitos del desarrollo del cómputo que fueron marcados a través de los juegos es una gran rama de la inteligencia artificial que llevó al diseño de incontables algoritmos de exploración de árboles de decisión con demasiados estados posibles para una búsqueda exhaustiva: A diferencia del gato, donde hay un máximo de 26,830 juegos posibles, la explosión combinatoria de posibilidades en el ajedrez y la importancia de seguir una estrategia con un horizonte a varios movimientos. Si bien ya ha quedado demostrado que jugar ajedrez no demuestra inteligencia, buscar cómo enfrentarse a un oponente humano con cierto grado de éxito sí marcó grandes hitos en el desarrollo de esta importante disciplina. En 1950, Claude Shannon publicó el artículo “Programming a Computer for Playing Chess” en la revista “Philosophical magazine”. En 1951, Dietrich Prinz presentó un programa capaz de encontrar si era posible llegar a un mate en dos jugadas (un gran logro, dados los límites de la memoria a esas alturas). Para 1958, Alex Bernstein programó un jugador de ajedrez capaz de llevar a cabo un partido completo, aunque bastante fácil de vencer. Y desde ahí, continuó el perfeccionamiento de los jugadores automatizados de ajedrez, hasta que en 1997 IBM alcanzó el hito de derrotar al campeón mundial en esa época, Gary Kasparov, con su computadora Deep Blue. Y cabe mencionar que, si bien el motor que animó a la exploración y desarrollo de técnicas automatizadas para jugar ajedrez como parte del avance de la inteligencia artificial, esto no significa que Deep Blue sea más inteligente que Kasparov o, de hecho, que sea calificable de inteligente: El hito que se logró es optimizar un algoritmo de búsqueda específico a un problema dentro de un campo con un espacio de posibilidades que puede considerarse efectivamente infinito. Si les interesa leer específicamente acerca del desarrollo del ajedrez como disciplina computacional, les sugiero visitar http://chessprogramming.wikispaces.com/. 50
.COLUMNA
Programar es un Estilo de Vida
››“Hacia mediados de los 70’s, con internet floreciendo...
Gráficas, redes... ¡A matar marcianitos!
En la década de 1960, las computadoras proliferaron en las universidades y ya no eran sólo los profesores quienes podían utilizarlas, sino que los alumnos comenzaron a tener acceso y, obviamente, con ello llegó un gran influjo de nuevas ideas. Para 1961, los alumnos del MIT Martin Graetz, Steve Russell y Wayne Witanen crearon el primer juego con uno de los temas más recurrentes de esta categoría: La guerra en el espacio, precisamente con el juego «Spacewar!» — Y en este caso, a diferencia de los mencionados anteriormente, lo hicieron puramente por diversión, para aprender a programar la unidad gráfica vectorial de la computadora DEC PDP-1 recién adquirida por su universidad. Spacewar! era un juego hecho para dos jugadores que se enfrentaban en un duelo espacial, con interacción en tiempo real, aunque necesariamente frente a la misma consola. Este juego llegó a ser tan popular que se convirtió en uno de los programas empleados como demostración por el personal de DEC. Paralelamente, eran cada vez más comunes los sistemas de tiempo compartido, donde varios usuarios podían sentarse cada uno frente a su propia terminal y usar la misma computadora. Estas computadoras además ofrecían normalmente la capacidad de comunicarse entre sesiones. No tardaron en aparecer los primeros juegos multijugador, en los que cada uno de los participantes asumía un rol distinto. En 1971 fueron desarrollados juegos como Star Trek o Baseball, en que los participantes tenían que actuar como equipos. Los primeros juegos de acción multijugador con perspectiva 3D en primera persona (First-person Shooters) llegaron en 1974: Spasim (Space Simulator), en los sistemas PLATO de la Universidad de Illinois, y Maze War, en el centro AMES de Investigación de NASA en California. Y hacia mediados de 70’s, ya con Internet floreciendo entre las principales universidades de Estados Unidos, comenzaron a aparecer varios MUDs, mundos en línea de aventuras interactivas, verdaderamente multijugador, presentando prácticamente todos
los elementos que esperaríamos hoy de los juegos en plataformas de interacción social acorde a la tecnología disponible en aquel entonces, pero con niveles de interacción social muy cercanos a los que conocemos hoy.
El BBS: Las redes para el resto de nosotros
Ya en los 1980, tras la explosión de la revolución de las computadoras personales, pero mucho antes de la masificación del acceso a Internet, grupos de aficionados de todo el mundo comenzaron a conectarse entre sí con los medios que la tecnología ofrecía: Comenzaron a aparecer Sistemas de Boletín Electrónico (Bulletin Board Systems o BBSes), computadoras personales de entusiastas conectadas a una línea telefónica, programadas para recibir llamadas de quien quisiera pasar un rato por ahí, para platicar en los foros, intercambiar archivos o participar de los juegos multijugador, aunque en este caso, dado que las conexiones eran telefónicas, casi todos eran con una interacción basada en turnos. No puedo dejar de mencionar a los BBSes dado que, hacia principios de los 1990, fui operador de uno de los aproximadamente 20 BBSes que hubo en la Ciudad de México por aquellos días. Llegamos a tener comunidades vibrantes, de aproximadamente mil usuarios, que poco a poco fuimos migrando a Internet. Algunos de los juegos BBSeros, como el TradeWars 2002, reaparecieron años más tarde en Internet, aunque manteniendo en su formato original basado en texto en una terminal de 80×25 caracteres. Como en tantos otros casos, en el campo de los juegos por computadora el verdadero desarrollo e innovación se dio cuando no había aún referentes, en las primeras décadas. Y aunque el mundo de los juegos parece completamente distinto hoy de lo que era hace 5, 10 o 20 años, la principal diferencia es el uso de gráficos y sonido junto con la capacidad de almacenamiento (y por tanto, de interacción) a disposición del usuario, no las ideas principales. En los últimos años hemos visto muy interesantes cambios en la forma de interacción, con los controles basados en acelerómetros (Nintendo Wii) o en reconocimiento de imágenes (Kinect). Queda mucho por explorar, por inventar. Y dado cómo han ido de la mano el avance del cómputo y de los juegos, espero que los lectores de esta revista inyecten nueva vida y nuevas ideas en este campo. Estas ideas indudablemente terminarán alcanzando a nuestra disciplina completa.
››Por Gunnar Wolf 51
Software Guru
Para cerrar este apartado: Otra razón que da especial importancia al ajedrez dentro del listado que estoy presentando es que, de entre los juegos primigenios, éste es el primero en el que la computadora asume un rol activo: No se limita a presentar el tablero, llevar el estado del juego o asegurarse de que los jugadores efectúen movidas legales, sino que es el primer intento que se hace de sobrepasar competitivamente al humano, colocándolo en el lugar del contrincante.
MUDS”
www.sg.com.mx |
comenzaron a aparecer los
.FUNDAMENTOS
Recomendaciones para
Construcción de Sitios Web
››Por César González Mendoza
D
iseño Web (Web Design) es para muchos una gran oportunidad de venta, para otros una fuente de empleo y un medio de subsistencia dentro de esta sociedad. Para mí, es una satisfacción total. Todos ya conocemos el famoso y resonado término “Web Design”, pero pocos saben en verdad conjuntar el Diseño visual con esas líneas de texto combinadas llamadas “programación”. Y créeme que en verdad es difícil de entender cómo un puñado de alfanuméricos pueden mutar y convertirse en toda una aplicación eficiente y poderosa, capaz de superar en muchas ocasiones el IQ humano, ¡en verdad es sorprendente!
Programo o diseño (visual o funcional)
Hoy en día una gran cantidad de iniciados dentro del mundo web, al cual prefiero llamar “online” están resolviendo una gran cantidad de necesidades surgidas de las PYMES en este tercer siglo, pero aunque resuelven la necesidad de estar arriba en la enorme telaraña para darse a conocer masivamente, han descuidado la presentación y el impacto visual que hoy día necesita tener una Hoja Web. No sólo se han olvidado de la teoría “menos es más” sino que la invirtieron, logrando que los proyectos web que desarrollan se conviertan en basura visual y funcional, es por eso que al iniciar la construcción o remodelación de un sitio web, tenemos que pensar en tres elementos básicos: 1. El cliente. Es necesario escuchar las necesidades de un cliente, en ocasiones piden cosas que aún no se han inventado y sólo nos demuestran que jamás en su vida han tocado una línea de código. 2. El auditorio general. Este lo conformamos todos los miles de millones de usuarios que accedemos diariamente al
mundo “online”, por ello somos los mejores críticos y calificadores de un buen sitio. 3. El autor. Es importante que el creador del proyecto web (ya sea una página informativa estática o un gran portal dinámico) se apegue a los estándares de calidad y estética que la sociedad exige, pero no sólo eso, sino que también satisfaga al propio autor su trabajo realizado, ya que habla de su portafolio personal el cual es la llave que abre las puertas de su desarrollo profesional. Aunado a lo anterior, tenemos que pensar en las siguientes dos partes esenciales: El diseño gráfico del sitio y en la funcionalidad del mismo. Puede ser que tengamos muy buenas herramientas que nos ayuden a resolver necesidades básicas dentro del sitio, pero la paleta de colores, la tipografía, las imágenes y elementos gráficos podrían ser un poco deficientes para solventar la estética de nuestra programación. A pesar de las muchas herramientas que existen hoy en día, no podemos dejar de pensar en ¿Cómo hacer que mi web luzca mejor que muchas? Debemos de adoptar un espíritu innovador que esté en vanguardia con la gran cantidad de dispositivos que se han lanzado al mercado, ¿qué quiere decir esto? No es lo mismo disfrutar del diseño y la estética de una IPad o un IPhone, está comprobado que las personas son atraídas a ver un dispositivo por los colores y textos que desprende la pantalla, lo cual nos confirma la importancia que conlleva la estética de nuestro sitio. No cabe duda, hay que combinar la comunicación Visual con la Funcional y esto nos dará como resultado un sitio sustentable.
Estrategias y fases para la construcción de un sitio
Mi recomendación es que lo hagan de la siguiente manera:
Toma del Proyecto. Debemos platicar con nuestro cliente potencial para conocer sus necesidades, inquietudes y dudas. A la hora de comentar con él la planeación del sitio, no seas muy explícito ni insistente en términos técnicos y de programación, ya que muchos de ellos no los conocen, al intentar conocerlos terminan rompiendo la idea principal que tenían acerca de la construcción de su sitio y piden cosas extremadamente difíciles, provocando así que su cotización se eleve por los cielos con lo que sólo se dará por perdido el proyecto. Trata de ser conciso y preciso, no platiques de desarrollos que no eres capaz de realizar. Por último, define bien con el cliente la arquitectura de información para que con ello elijas los lenguajes y tecnologías que usarás para la elaboración del sitio. Mapa del Sitio. Este proceso implica identificar las secciones y subsecciones principales de nuestro sitio y requiere de suma atención para organizar la información, además debemos de tomar en cuenta la estrategia de marketing que llevaremos a cabo, para no descuidar los intereses de nuestro cliente. Se plasma un mapa conceptual de contenidos, aplicaciones y formularios que nos ayudarán a tener una mejor arquitectura de información. Debemos de digitalizar la marca de nuestro cliente, este proceso nos ayudará a definir nuestro esqueleto web. Exploración (Scouting). Como sabemos, no somos los únicos dentro de este tipo de desarrollos, es por ello que se requiere de una exploración exhaustiva para visualizar la competencia, principalmente la de nuestro cliente en potencia. Con esta estrategia podremos comunicar un reporte de servicio, en el cual expresaremos como están trabajando las demás marcas, qué 52
.FUNDAMENTOS
“…hay que combinar la comunicación Visual con la Funcional y esto nos dará como resultado un sitio sustentable.”
Paleta de colores - Recomiendo que se desprenda a partir de un logotipo. Paleta Tipográfica - Relacionada al área profesional de la cual habla tu web) Elementos gráficos - Totalmente predominados por el cliente y solo implementarás íconos y algunos efectos visuales. Constantes Programáticas - Todos aquellos elementos funcionales que se repiten dentro de tu hoja. Construcción. Ahora sí es momento de construir tu proyecto, lo cual será mucho más fácil porque ya tenemos contemplados todos los elementos que usaremos, esto es como hacer un difícil platillo de comida con todos los ingredientes y elementos que se necesitan para prepararlo.
Término. Realiza un respaldo de tu web para que la almacenes dentro de tu portafolio y no cierres el proyecto a menos que estés completamente seguro que todo ha quedado funcionalmente bien y visualmente inspirador. También asegura que tu cliente esté satisfecho con el trabajo que haz realizado, nunca trabajes en un proyecto sólo pensando en el monto de dinero que recibirás, hazlo también por placer. Para obtener un html sin errores e impecable, toma en cuenta y recuerda bien la estructura casi humana del código: Cabeza, cuerpo y pies. Sin dejar a un lado los elementos que corresponden a cada uno de los miembros de nuestra página, si hacemos esto lograremos que nuestras etiquetas funcionen de manera correcta, no te olvides que html funciona a base de etiquetas que dan formato a cada cosa que envuelven. El Diseño Web debe conceptualizarse como una estrategia en la que se considere tanto lo visual como lo funcional para que sea sustentable y también para que sea un éxito.
Optimización de motores de búsqueda (SEO, Search Engine Optimization). Debes de asegurarte que tu proyecto estará .BIO César González Mendoza es especialista en el desarrollo web (.net & mysql. Acompaña a cada uno de sus proyectos con una interfaz gráfica y visual que se destaca por ser fresca e innovadora. Actualmente se desempeña como Gerente de Sistemas en un Grupo Dental. Es apasionado de las aplicaciones mobile y le gusta combinar las tecnologías alternas a flash. @cesargm7, cesar@drop-systems.com
Software Guru
Pre-construcción. La construcción no se puede levantar si no hay cimientos, es por ello que se tienen que preparar. ¿Cuáles son los cimientos sólidos que harán lucir de manera brillante mi web?:
visible en los primeros lugares de búsqueda dentro de los principales motores, así que optimiza todos los recursos para que no tengas problemas de ningún tipo y seas el más popular dentro de la vida “online”.
www.sg.com.mx |
están proponiendo, cuál es su principal estrategia de mercadotecnia dentro su entorno digital, así mismo a la hora de navegar dentro de los proyectos a vencer podremos definir en forma las tecnologías que usaremos, ya sea para un proyecto dinámico o estático. No podemos comenzar a construir sobre el código, sin antes definir las técnicas de desarrollo.
.TECNOLOGÍA Gadgets Sony
HX850 Encender un televisor es entrar a una experiencia de entretenimiento y para que esta experiencia sea asombrosa ¡necesitamos que todos nuestros sentidos sean impactados! Es por ello que Sony a través de su línea Home Entertainment 2012 nos trae la nueva Sony HX850 con mayores opciones para una nueva forma de entretenimiento en el hogar. Aparte de contar con un diseño delgado y elegante, cuenta con un procesador de video X-RealityTM PRO el cual brinda imágenes en alta definición sin importar el tipo de contenidos en 2D o 3D, videos Full HD de un reproductor Blu-ray Disc™, o videos Web en baja resolución. Como ya no podemos concebir dispositivos sin conectividad, la Sony HX850 nos permite estar en contacto con el mundo digital a través de las redes sociales y el Skype. Además, se podrá conectar y explorar un mundo de diversión con un número creciente de aplicaciones construidas solo para la TV, incluyendo actualizaciones automáticas. Y para demostrar el apoyo a la ecología, cuenta con un sorprendente sensor de presencia inteligente que maximiza el ahorro de energía. Definitivamente, ¡una experiencia de entretenimiento excepcional!
Audi
e-bike WÖRTHERSEE Este es el resultado que se logra de la mezcla entre la ingeniería alemana junto con el mejor y más poderoso motor eléctrico de 2.3W, con pedaleo a una velocidad de hasta 50 millas por hora. Pero la Audi e-bike Wörthersee no sólo es una bicicleta eléctrica muy veloz sino que además te permite comunicación directa con tu smartphone así como grabar y compartir en tus perfiles de redes sociales tus logros, trucos y retos en el camino. Su batería de 6kg se ve disimulada por un ligero marco de fibra de carbono de tan solo 1.6kg. Todas las anteriores características bastante sorprendentes, cierran con un tiempo de carga de 2.5 horas. ¿Cuándo es que esta belleza de dos ruedas estará disponible para rodar? Aún no hay una fecha, porque continúan trabajando en el prototipo, pero no hay que perderla de vista.
Dell
XPS 13 Es la ultrabook Dell que durante su presentación en el pasado CES 2012 robó suspiros y envidias debido a su agradable diseño, su cuerpo de 13” en un chasis de fibra de carbono con sólo 1.35kg. Grosor de 18mm con un poderoso procesador Intel Core iSeries en versión i5 o i7, 4B de RAM y hasta 256GB de almacenamiento SSD, incluye también gráficos Intel HD 3000, conectividad Bluetooth 3.0, puerto USB 3.0 o Webcams de 1.3MP, más batería de 8 horas. Estará en línea lista para todos aquellos que lo deseen a partir del mes de junio. Vale la pena destacar que Dell está trabajando con Canonical (creadores de Ubuntu) para sacar al mercado una edición de la XPS 13 enfocada a desarrolladores y basada en Ubuntu Linux.
54
Escolar Hitech
www.escolarhitech.com.mx
09
Infotec
www.infotec.com.mx
4F
Kernel
www.kerneltechnologies.com
53
Manpower
www.manpower.com.mx
3F
MexicoFirst
www.mexico-first.org
41
Microsoft
www.microsoft.com.mx
49
Qualtop
www.qualtop.com
07
SC CE
www.sg.com.mx/sgce/2012
2F - 1
SG Talento
11
www.sg.com.mx |
talento.sg.com.mx
Software Guru
Directorio
TENEMOS UN ESPACIO RESERVADO PARA TI SG se distribuye de manera impresa en la República Mexicana, y de manera digital llega a más de 25mil lectores de habla hispana. El anuncio en la revista digital cuenta con hiperliga directa a tu sitio web, lo que te dará la oportunidad de acercarte a nuevos clientes. “Es una gran oportunidad participar con Software Guru, pues comprobamos que es un medio efectivo.” -Novalys Latinoamérica Contáctanos en el (55) 5239.5502 o en publicidad@sg.com.mx
.BIBLIOTECA
The Art of Agile Development James Shore & Shane Warden Editorial O’REILLY
A través de los años, las metodologías ágiles pasaron de ser una moda o una promesa, a una cultura de desarrollo de software en la que cada vez más las empresas y los desarrolladores apuestan. Este libro plantea a la programación ágil como un arte que refina las prácticas del día a día hasta convertir a los equipos en una orquesta desarrolladora de software, resaltando como beneficio no solamente el incremento en la productividad sino el de trabajar diferente. Incluso recomienda que la productividad no sea la motivación principal. Para fortalecer el pensamiento de “trabajar diferente” en lugar de “trabajar más rápido”, hay un capítulo especial dedicado a la Colaboración en el cual, llama la atención la dedicación de varias páginas al tema de la confianza y otras tantas al verdadero involucramiento del cliente/usuario. Se destaca también como un factor para alcanzar el éxito personal, técnico y organizacional, por lo que si se tiene problema en dichas áreas, se recomienda incorporar el desarrollo ágil en el día a día y éste libro presenta las bases para entenderlo y adoptarlo como una forma de pensamiento. El cambio en el pensamiento individual provoca (a través del contagio) un cambio organizacional. Los métodos ágiles ayudan a las organizaciones a alcanzar el éxito a través de enfocarse en las entregas de valor y en el decremento de los costos. Lo anterior se traduce en el incremento del (muy anhelado) retorno de inversión. Si continuamente tienes plazos de entrega agresivos, éste libro es para ti.
Programming Interactivity: An interactive guide to Processing, Arduino and openFrameworks Joshua Noble Editorial O’Reilly. 2da edición, 2012
Programming Interactivity es un gran recurso para aquellos interesados en aprender a crear sistemas interactivos de “cómputo físico” (en SG #34 hablamos bastante sobre este tema). Se enfoca en el uso de tres tecnologías principalmente: Arduino, Processing y openFrameworks. Este libro está principalmente dirigido a diseñadores y aficionados que posiblemente no tengan experiencia programando, por lo que cubre un espectro muy amplio de temas, desde introducir conceptos básicos de programación hasta temas avanzados como programar tus propios shaders con OpenGL o como implementar lógica para reconocer gestures. Esa amplitud de temas provoca que Programming Interactivity tenga más de 650 páginas, así que tal vez prefieras tenerlo como e-book. Para
explicar las distintos tecnologías, el autor utiliza una estrategia que nos agradó, ya que incluye: • Una explicación de qué es • Información sobre como obtenerlo/instalarlo • Entrevistas con las personas que lo crearon, para que captemos mejor su objetivo y razonamiento • Ejemplos prácticos con código • Ligas a recursos con mayor información Así que si estás interesado en iniciarte en el fascinante mundo de construir elementos de cómputo físico, Programming Interactivity será un recurso invaluable. La primera edición de este libro se publicó en el 2009 y la segunda edición está por salir. 56
www.sg.com.mx |
Software Guru