Revista Software Guru SG34-ComputoFisico

download Revista Software Guru SG34-ComputoFisico

of 60

Transcript of Revista Software Guru SG34-ComputoFisico

WebSockets

Novedades

CONOCIMIENTO EN PRCTICANoviembre 2011-Enero 2012 www.sg.com.mx

Mxico, $65.00

CONOCIMIENTO EN PRCTICA

34.CONTENIDONoviembre 2011-Enero 2012 |

www.sg.com.mx

22

Pg.

En PortadaCmputo Fsico22El mundo es una interfaz! Hemos concentrado diversos artculos con informacin sobre algunos de los aspectos que consideramos ms relevantes sobre el cmputo fsico, desde el fenmeno provocado por Arduino y el open hardware, hasta la construccin y programacin de robots.

ColumnasTejiendo Nuestra RedPor Hanna Oktaba

06

Mejora ContinuaPor Luis Cuellar

08

Tendencias en SoftwarePor Luis Daniel Soto

11

Columna invitadaPor Mark Settle

32

Cdigo InnovarePor Jess Arriola Villarreal

46

Tecno-lgicoPor Mauricio Angulo

48

Programar es un Estilo de VidaPor Gunnar Wolf

50

02

.CONTENIDO

Herramientas y NovedadesLo que VieneSocial Analytics, Open Compute Project, GitHub Enterprise, Apache Sqoop

10

Tutorial Versionando con GitPor Javier Novoa

12

Novedades WebSocketsPor Gonzalo Ayuso

16

Pg.

18

CarreraCapital Humano en SoftwarePor Pedro Galvn

52

EmprendiendoPor Vctor Reyes

Generacin de modelos de negocio

18

En Cada NmeroEditorial 04 05 54 56 Noticias Publirreportaje Gadgets

Especial

Resea del evento SG Conference & Expo 2011

20

PrcticasUsabilidad 34 La Navegacin y los Esquemas de Organizacin de la InformacinPor Pamela Rodrguez

Prueba de Software Un Buen Inicio para las Pruebas de SeguridadPor Berenice Ruz y Miguel Angel Corts

36

Project Management Estimacin de CostosPor Hctor Cuesta-Arvizu y Jos Sergio Ruz Castilla

38

Arquitectura Lneas de Productos de SoftwarePor Humberto Cervantes

40

Gestin de Riesgos Administracin Colaborativa de RiesgosPor Leonardo G. Mrak

42

03

.EDITORIAL Bienvenida

.Gracias por todo lo compartido durante el 2011 Nos vemos en el 2012 con ms novedades!.

sta es la ltima edicin del 2011! Cumplimos un ao ms de generar conocimiento sobre la industria de T.I. y agradecemos a todos ustedes, nuestros lectores, que nos sigan eligiendo como el medio de preferencia de habla hispana. En sta ocasin les tenemos como parte del tema principal, diversos artculos sobre cmputo fsico en los cuales se demuestra que el mundo no est an conforme con los tipos de interaccin con la tecnologa que existen al da de hoy. El cmputo fsico fomenta nuevos estilos de interaccin en los que casi cualquier artefacto se puede transformar en una interfaz. Es muy importante conocer ste tipo de tendencias, ya que la historia ha comprobado que toda ficcin tarde o temprano se alcanza y en ste caso, seguramente est sucediendo ms temprano que tarde. Tambin queremos compartirles que este ao constatamos, una vez ms, que hemos logrado junto con ustedes formar una verdadera comunidad de especialistas de software, comunidad que durante ste ao comparti momentos en la Conferencia Virtual, los espacios de aprendizaje colaborativo de SGCampus y en el evento SG Conference & Expo 2011.

E

Alcanzando a la ficcin

Equipo EditorialSOFTWARE GURU

DIRECTORIO SGDireccin Editorial Pedro Galvn / Direccin de Operaciones Mara Ruvalcaba Coordinacin Editorial Vanessa Amaya / Arte y Diseo Oscar Smano / Suscripciones Denise Aguilar Consejo Editorial Jorge Valds - PMI / Luis Cullar - Softtek / Luis D. Soto - Microsoft / Hanna Oktaba - UNAM /Emilio Osorio - Sistemas Humanos / Luis Vinicio Len - e-Quallity / Mauricio Angulo - Tesseract Space

Colaboradores Antonio Toriz, Berenice Ruiz, Gonzalo Ayuso, Gunnar Wolf, Hctor Cuesta, Hugo Fernndez, Humberto Cervantes, Javier Novoa,Jess Arriola Villareal, Jos Sergio Ruz Castilla, Leonardo G. Mrak, Mark Settle, Mauricio Angulo, Miguel Angel Corts, Miguel Angel Ramrez, Pamela Rodrguez, Vctor Reyes

Ventas Claudia Perea / Alianzas Montserrat Ramrez / Webmaster Karen Rodrguez / Educacin contnua Ana Karen Rosales Contacto [email protected] Software Guru es una publicacin trimestral editada por Brainworx, S.A. de C.V., Temstocles 34 piso 3, Mxico DF 11560. Los contenidos de esta publicacin son propiedad intelectual de los autores y estn licenciados bajo Creative Commons Atribucin-No comercial 2.5 Mxico. Todos los artculos son responsabilidad de sus propios autores y no necesariamente reflejan el punto de vista de la editorial. Reserva de Derechos al Uso Exclusivo: En trmite. ISSN: 1870-0888. Registro Postal: PP15-5106. Distribuido por Sepomex. Se imprimi en noviembre de 2011 en 4Press.

04

.NOTICIAS

.Adobe Max 2011

Adobe Max, la conferencia anual para usuarios y desarrolladores de Adobe, se realiz en Los Angeles del 2 al 5 de octubre. Entre las notas principales de este evento est el prximo lanzamiento del Adobe Creative Cloud, un espacio colaborativo en la nube donde los profesionistas pueden almacenar y organizar sus activos digitales, y compartir avances con sus clientes para que stos puedan visualizarlos desde la nube. La agenda incluy un buen nmero de sesiones relacionadas con HTML5, lo cual muestra el compromiso e inters que tiene Adobe en esta tecnologa. De hecho, uno de los anuncios realizado durante estos das fue que Adobe compr a Nitobi, creadores de la plataforma PhoneGap para desarrollar aplicaciones mviles con Javascript y HTML. Los videos de los keynotes estn disponibles en http://swgu.ru/adobemax2011

Estudiantes, empresarios, docentes, y pblico interesado en la tecnologa, acudieron el 3 y 4 de noviembre al congreso El Futuro en Tus Manos 2011 organizado por CITI Tabasco en la ciudad de Villahermosa. El evento cont con la participacin de importantes figuras en el mundo de la tecnologa tales como Juliano Tubino (Microsoft), Adelina Filigrana (@wera_supernova), Claudio Cosso (AppCircus), Engel Fonseca (Neurona Digital), Jorge Soto (Citivox), Andrs Barreto (OnSwipe), Juan Lozada (Microsoft) y el investigador Ruy Cervantes, quien coment sobre el ecosistema de emprendimiento en Mxico y su naciente industria de internet.

.El Futuro en Tus Manos 2011

.Alpha Consultora reconocida como Empresa de Capacitacin del Ao por el PMIEl evento Best of the Best in Project Management 2011 fu celebrado el pasado 22 de Octubre durante el Congreso Global del PMI en Grapevine, Texas. Celebramos que lo mejor de lo mejor ahora se qued en Mxico, ya que la empresa Alpha Consultora fue premiada como Proveedor de Capacitacin del Ao 2011, siendo la primera empresa latinoamericana honrada con esta distincin. El objetivo de este premio en especial, es reconocer y honrar al proveedor que hubiera demostrado capacidades excepcionales para la implementacin y presentacin de un programa en direccin de proyectos, en esta ocasin reconociendo los programas de capacitacin de vanguardia en Administracin de Proyectos impartidos por Alpha Consultora.Software Guru

Dell comparti su visin sobre el impacto de las principales tendencias en la industria de tecnologas de informacin durante la primera edicin de su evento Dell World, realizado en la ciudad de Austin. Entre las personas que presentaron en Dell World estuvieron los CEOs de varias de las empresas ms importantes de la industria como Steve Ballmer (Microsoft), Paul Maritz (VMware), Marc Benioff (salesforce.com), Paul Otellini (Intel). Los temas que dominaron la agenda fueron el cmputo en la nube, cmputo mvil en las empresas y aprovechamiento de redes sociales en las empresas. Los videos de las sesiones estn disponibles en http://swgu.ru/dellworld2011

.Gartner - The Future of IT

Gartner celebr su 14va Conferencia Anual The Future of IT del 4 al 6 de octubre en el Centro Banamex de la Ciudad de Mxico. En dicho evento participaron 12 destacados analistas que platicaron con los asistentes sobre estrategias tecnolgicas para transformar los negocios, con el objetivo de ayudar a los CIOs y altos ejecutivos de la TI a llevar sus negocios hacia nuevos niveles de expansin y rentabilidad. El evento incorpor gran variedad de sesiones, workshops, mesas redondas, casos de estudio, sesiones sobre cuadrantes mgicos, sesiones por solucin de proveedor, foro de demostracin de productos y las ya tradicionales one-on-one con los analistas.Para mayor informacin, noticias al da y actualizaciones de la industria visita: www.sg.com.mx

05

www.sg.com.mx |

.Dell World

.COLUMNA Tejiendo nuesTra red

Entre Medelln, Rio de Janeiro y Miahuatln

Hanna Oktaba, Ivar Jacobson y Magdalena Dvila

Medelln, Colombia, agosto de 2011

ELa Dra. Hanna Oktaba es profesora de la UNAM, miembro del IPRC, y directora tcnica del proyecto COMPATISOFT. hanna.oktaba@ ciencias.unam.mx

n mi columna de mayo-junio de este ao les coment sobre la iniciativa del SEMAT (Software Engineering Method and Theory) promovida por Ivar Jacobson, entre otras personalidades. En agosto tuve la oportunidad de escucharlo en persona en Medelln, Colombia. El Dr. Carlos Mario Zapata de la Universidad Nacional de Colombia logr que Ivar aceptara visitar este pas. Carlos aprovech la oportunidad para convocar a varios colegas acadmicos de Amrica Latina para dos cosas. Lo primero que nos pidi fue que escribiramos un captulo cada quien para un libro que refleje el estado de investigacin en Ingeniera de Software en esta zona geogrfica y lo segundo fue para constituir el captulo Latinoamericano del SEMAT. As, entre el 11 y 12 de agosto de 2011 nos encontramos con Jacobson en

Medelln escuchando un llamado a evolucionar la forma en que desarrollamos software identificando lo esencial de lo que ha servido de los mtodos tradicionales y agregando lo ms til de las propuestas de mtodos giles. Lo que deberamos buscar es: Hacer mejor software til, extensible y confiable Hacerlo ms rpido y ms barato- aplicando reusabilidad a gran escala Hacerlo con equipos ms felices gente competente y motivada Parece tan sencillo y a la vez tan difcil. Ivar estaba acompaado de una mujer joven, de origen chino, Shihong Huang quien nos cont la experiencia de la creacin del primer captulo de apoyo al

06

.COLUMNA Tejiendo nuesTra red

Las reservas de PeTrLeo, Por mayores que sean, un da se acaBan. Las coPas deLSEMAT constituido en China. Su servidora y Magdalena Dvila, mi alumna de doctorado, presentamos una propuesta de la estructura de prcticas indispensables para desarrollar un proyecto de software (Software Development Project Kernel), la cual qued incluida en el libro Software Engineering Methods, Modeling and Teaching, editado por la Universidad de Medelln. Tambin qued constituido el captulo Latinoamericano del SEMAT (www.sematla.org), coordinado por Carlos Mario Zapata y con Ivar Jacobson como testigo de honor. Durante el evento Ivar mencion que est preparando un nuevo libro, que presentar la propuesta de Casos de Uso 2.0. A principio de octubre ya lo dio a conocer con mayor detalle y probablemente se publicar en forma electrnica en noviembre. A los interesados les sugiero visitar el sitio de Ivar Jacobson International.

mundo y Las oLimPiadas Pasan. eL conocimienTo Permanece.

- BeniTo PareT

de los mtodos giles para integrar las bondades de ambos enfoques. Encontramos un entusiasmo e inters de trabajar de manera conjunta en este tema con los brasileos. La leccin que aprend en este evento resumo citando al Coordinador General de RIOINFO 2011, Benito Paret: Las reservas de petrleo, por mayores que sean, un da se acaban. Las copas del mundo y las olimpiadas pasan. El conocimiento permanece.

_ Minahuatln, Oaxaca, octubre de 2011Cuando me invitaron a dar una pltica en la 4ta Jornada de Informtica en la Universidad de la Sierra del Sur ubicada cerca de Miahuatln, Oax., yo ni saba que exista una ciudad con este nombre. La encontr a medio camino (psimo por cierto) entre la ciudad de Oaxaca y Huatulco. Cuando me enter de que esta universidad es la hermana de la Universidad Tecnolgica de la Mixteca, saba que me espera un viaje muy aleccionador y muy agradable. Hace aos ya visit a la Mixteca fundada por el rector Modesto Seara Vzquez en un espacio rural y me impresion su organizacin y el nivel acadmico. Uno de mis mejores alumnos de la maestra es egresado de all. El proyecto tuvo tanto xito que hoy el mismo rector dirige y coordina toda una red de universidades pblicas estatales en Oaxaca. En Miahuatln me encontr con un campus muy bonito para 1500 alumnos, con reas verdes bien cuidadas y con un grupo de jvenes profesores de la carrera de Informtica muy entusiastas y muy bien preparados. La Ingeniera de Software no es desconocida ni para los profesores ni para los alumnos y ya estn desarrollando proyectos muy interesantes. El rector me estuvo presumiendo que en los ltimos aos los egresados de estas universidades salen muy bien en las evaluaciones de CENEVAL, pero que normalmente tienen que migrar a grandes ciudades para conseguir trabajo. Generar espacios de trabajo locales para elevar el nivel de aprovechamiento de TI en poblaciones marginadas podra ser una solucin, pero quin va a invertir? Este es un reto para todos y no slo en Oaxaca.

_ Ro de Janeiro, Brasil, septiembre de 2011RIOINFO es un evento anual en el cual se encuentran los empresarios de la industria de TI con los representantes del gobierno para discutir los temas de inters y buscar caminos para fortalecer la industria brasilea. El evento dura tres das y est ms enfocado a mesas de discusin que a las conferencias tcnicas. En este evento me enter de que la industria brasilea de software y de servicios est formada por cerca de 75 mil empresas, lo que me pareci desorbitante en comparacin con alrededor de 2800 de las mexicanas, mencionadas en agosto en la reunin de la constitucin del Consejo Nacional de Clusters de Software y TICs. Los brasileos estiman que en sus empresas trabajan alrededor de 600 mil personas, que sumados a las 370 mil involucradas en empresas usuarias forman casi un milln. Dos eventos de RIOINFO me llamaron mucho la atencin. Los empresarios invitaron en dos sesiones separadas a los representantes de PETROBRAS (la homloga de PEMEX) y del Ejrcito y la Armada para convencerlos de que estas instituciones pblicas deberan de comprar el software y sus servicios a las empresas brasileas. El Secretario de Ciencia y Tecnologa (ellos si lo tienen en ese rango) habl de convertir los resultados de estas discusiones en polticas pblicas. Y en Mxico cando? Con Claude Laport, editor del ISO/IEC 29110, nos toc promover el nuevo estndar internacional en este foro. Tuvimos oportunidad de discutir la necesidad de combinar el Perfil Bsico con las prcticas07

Por Hanna Oktaba

www.sg.com.mx |

Software Guru

.COLUMNA mejora conTinua

M

La

Estrategia de Mejora de Softwarede confianza lo cual normalmente surge a travs del tiempo. Las compaas que son ms exitosas con el manejo de proveedores generan una estrategia de socios con sus proveedores, se genera una seleccin de proveedores enfocada principalmente en las habilidades, conocimiento, valores y cultura de las organizaciones para elegir un grupo limitado que puede participar en mis licitaciones, generalmente llamados proveedores preferentes. Es cierto que esto implica que muchas compaas que pueden ayudar a problemas particulares se quedan fuera, pero la idea es que la seleccin est diseada para asegurar que a largo plazo el desempeo y afinidad ayude a tener proyectos exitosos.

e encuentro leyendo un libro en el que se define a la estrategia como: El arte de encontrar formas de cooperar aun cuando las diferentes partes estn motivadas por intereses personales. La industria de subcontratistas de servicios de sistemas est basada precisamente en esta idea, lograr una cooperacin entre diferentes compaas, a veces hasta competidoras, para lograr un fin en comn que beneficie a todas las partes. Por lo que veamos si podemos aplicar la teora de juegos a nuestros problemas.

Uno de los ejercicios ms comunes en teora de juegos es el dilema del prisionero, el ejemplo clsico de este problema es el siguiente: dos hombres son arrestados por la polica, pero esta no cuenta con informacin suficiente para una condena. Tras la separacin de los dos hombres, la polica ofrece un trato a ambos, si uno declara en contra de su pareja y el otro permanece en silencio, el traidor queda libre y el otro hombre recibe una condena de cinco aos de prisin. Si ambos permanecen en silencio, ambos son condenados a seis meses de carcel por un cargo menor y si ambos se traicionan mutuamente, cada uno recibe una sentencia de un ao de prisin. Cada prisionero debe elegir entre traicionar o permanecer en silencio, qu deben hacer? Lo importante en este juego es que ambos estn separados y no saben lo que el otro har y aunque lo mejor para ambos es no decir nada, la pregunta es si confas en tu compaero lo suficiente como para no hacerlo. Este problema ilustra cmo en ocasiones estamos en circunstancias que motivan a apoyar una decisin contraproducente. Qu haran ustedes? Ahora veamos este juego desde otro punto de vista: Yo estoy contratando a un proveedor para que desarrolle una aplicacin critica para mi organizacin, de la cual depende mi futuro en la misma. S que tengo que trabajar en conjunto con mi proveedor para lograr el xito del proyecto, pero por otro lado quiero asegurarme de que el proveedor est tan comprometido como yo, por lo que coloco en el contrato una penalizacin alta en caso de que los niveles de servicio no se cumplan. De esta manera, al menos si el proyecto fracasa recuperamos parte de la inversin. El proveedor sabe que en ocasiones los niveles de servicio no se cumplen por razones ajenas a l, como: cambios de alcance, problemas con los entregables de entrada, falta de definicin por parte del usuario, etc. El contrato no previene nada de esto y aunque lo hiciera no es posible pensar en todos las posibles fallas, por lo que se infla la propuesta y se busca hacer los objetivos ms holgados. El resultado: El proyecto est inflado y estamos ms preocupados en cmo defendernos de nuestra contraparte que en sacar el proyecto exitosamente. El dilema del prisionero es un problema de confianza, en donde la duda realmente es si confo en que la otra parte har lo correcto Luis R. Cuellar es director de calidad o no. En teora de juegos, existen varias formas de resolver a nivel mundial de Softtek. Es recoel dilema del prisionero, estos son algunos ejemplos que he nocido por la ASQ como Certified experimentado con organizaciones exitosas.Quality Manager, Certified Software Engineer y Six Sigma Black Belt. @lcuellar

El dilema del prisionero

Aprendizaje y crecimiento mutuo

En compaas excelentes se desecha la nocin de que el cliente lo sabe todo y se busca un modelo de cooperacin en donde tanto cliente como proveedor estn aprendiendo a hacer un mejor trabajo. La principal herramienta de aprendizaje en estos proyectos son las mtricas, por lo que son de suma importancia. Estas mtricas son primero utilizadas para controlar el proyecto y despus para mejorar continuamente el trabajo del equipo logrando no solamente un proyecto exitoso, sino en muchas ocasiones mejor de lo esperado. Muchos de los clientes que conozco, s generan penalidades en los proyectos, pero estos no estn ligadas a mtricas u objetivos especficos sino ms bien a la falta de accin y proactividad para corregir problemas. Por ejemplo, la primera vez que no se alcanza un objetivo se espera un plan de accin. Si la siguiente ocasin no se ha corregido, cliente y proveedor buscan soluciones en conjunto. Si las mtricas no mejoran entonces si surge una penalizacin. De forma similar, si las mtricas se cumplen arriba de lo esperado varios meses continuos se puede manejar un bono al proyecto. Lo importante es que una penalizacin es un ltimo recurso para asegurar que estamos en el mismo canal. El dilema del prisionero es muy difcil de resolver pero estudios indican que las personas tienden a escoger cooperar especialmente en relaciones a largo plazo. La industria de software est en constante crecimiento y definitivamente en la era de la informacin necesitamos cada vez ms de sistemas rpidos y de mejor calidad, por lo que la cooperacin es indispensable para todos. Hagamos de la industria del software algo de que sentirnos orgullosos en nuestro pas, y no una batalla campal. Primera llamada, primera.

Generar una relacin a largo plazo

Todas las soluciones del problema del prisionero tienden a ser a largo plazo. Lo que se busca es generar una relacin

Por Luis Cuellar

08

.HERRAMIENTAS Y TECNOLOGAS Lo que viene

Social Analytics

Anlisis de datos sociales

1

Microsoft est experimentando un nuevo servicio llamado Social Analytics que facilitar integrar en aplicaciones de negocio la capacidad de analizar corrientes de datos (data streams) de sitios sociales como Twitter, Facebook, YouTube, y obtener inteligencia. Esto permite que las empresas puedan obtener y analizar inmediatamente la respuesta de los clientes hacia las decisiones de negocio que se toman. Microsoft provee dos mecanismos para consumir servicios de Social Analytics. El primero es por medio de una herramienta llamada Engagement Client, y el segundo es directamente accediendo su API basado en REST y OData. http://www.microsoft.com/en-us/sqlazurelabs/labs/socialanalytics.aspx

2

OCP es una iniciativa creada por Facebook para compartir abiertamente diseos de data centers, con el objetivo de mejorar la estandarizacin y eficiencia en la industria. Facebook ha abierto como parte de OCP los detalles de diseo y construccin de su nuevo data center, para el cual construyeron sus propios servidores, racks y fuentes de poder, logrando superar en 38% la eficiencia de su data center previo, a un costo de construccin 24% menor. Recientemente se form una fundacin que manejar OCP, y en ella estn involucradas empresas como ASUS, Dell, Huawei, Red Hat, Cloudera, Rackspace y Netflix, por nombrar a algunas. http://opencompute.org

Open Compute Project

Data centers abiertos

GitHub EnterpriseHospeda GitHub en tus servidores

3

Como muchos de ustedes saben, GitHub es un servicio en internet para hospedar proyectos de software que utilizan el sistema de control de versiones Git, rpidamente GitHub se ha convertido en el mecanismo default entre desarrolladores para compartir cdigo. GitHub recientemente anunci la disponibilidad de GitHub Enterprise, el cual permite que organizaciones hospeden instancias de GitHub en sus propios servidores. De esta forma, las empresas pueden fcilmente establecer repositorios de cdigo fuente versionado para sus proyectos y empleados, manteniendo todo dentro de su firewall. http://enterprise.github.com

2

Apache Sqoop es una herramienta para transferir datos de forma eficiente y confiable entre clusters basados en Apache Hadoop, y fuentes de datos estructuradas tales como bases de datos relacionales, data warehouses empresariales y almacenes NoSQL. Con Scoop, puedes importar datos hacia el Hadoop Distributed File System (HDFS) o hacia sistemas relacionados como Hive y HBase. De forma similar, con Sqoop puedes extraer datos de Hadoop y exportarlos a bases de datos estructuradas. Sqoop hace todo esto de forma sencilla y eficiente, ya que a partir de los metadatos puede inferir su estructura y guardarla en un metaalmacenamiento Hive, y utilizar MapReduce para transferir los datos en paralelo. http://incubator.apache.org/sqoop10

Apache Sqoop

Mejora tu transferencia de datos a Hadoop

Tendencias en sofTware

.COLUMNA

Datos como Plataformal costo de la captura manual de un petabyte de informacin en la dcada pasada rebasaba, dependiendo de la precisin, varios millones de dlares. Gracias a los avances tecnolgicos, hoy el gran volumen de informacin nace de forma digital. Al ritmo actual de compresin y depuracin automtica de datos, el costo de almacenar un petabyte al final de la dcada ser menor a cinco dlares estadounidenses. El valor de la informacin ser mayor que el costo de almacenarlo. Las implicaciones son enormes. Todos debemos estar entusiasmados con las nuevas oportunidades que se abren: Mashup de datos. La capacidad de mejorar el diagnstico mdico ANTES de llegar a la sala de urgencias se est volviendo una realidad en los pases desarrollados y no me refiero a temas altamente relacionados con la privacidad como los productos que compramos en el supermercado y hbitos de ejercicio que podran ser extrados de nuestra estela transaccional, o el almacenamiento del registro mdico en la nube. Expongo un ejemplo: Con los sensores de ubicacin de las ambulancias unido a los patrones de trnsito en las ciudades es posible optimizar el movimiento para atender urgencias. Enriquecimiento de informacin. Hasta hoy, la inteligencia de negocios se ha centrado al interior de la organizacin, pero la capacidad de conectar los datos con el resto de los que existen en el mundo abre nuevas puertas a realizar preguntas ms sofisticadas, que antes era imposible contestar. Seguramente veremos el nacimiento de mercados de datos privados como una primer etapa y la creacin de un nuevo ecosistema de datos pblicos enriquecidos. RealtyTrac es un ejemplo real de empresa que revende informacin pblica enriquecida por analistas financieros sobre compra de propiedades. Nuevas posibilidades. Para generar ms utilidades, un analista desea poner a prueba un nuevo modelo con datos histricos de la bolsa de valores. Para que el modelo funcione es necesario analizar pocas de auge y de crisis, digamos 30 aos. Se desea incluir mercados internacionales y por supuesto, tomar la fuente con actualizaciones en tiempo real. Hasta recientemente11

rumbo a la autntica economa de la informacin

E

es TaL La canTidad de daTosque eL aPrendizaje Basado en mquinas ser fundamenTaL.esto era viable para organizaciones con recursos de cmputo masivos. Con tecnologas como Hadoop para Windows y el conector Hive de Excel, hoy esto es mucho ms accesible. El diluvio de datos se tendr que enfrentar con nuevas herramientas interactivas para explorar cantidades masivas de informacin la visualizacin continuar siendo muy relevante. Las plataformas de datos tendrn que evolucionar para administrar cualquier tipo de datos, gigantes o pequeos, desde cualquier lugar. La informacin deber ser consumida desde cualquier dispositivo porttil y en un contexto que haga sentido al usuario. Los metadatos son fundamentales para habilitar los mercados de datos descritos. Big Data se refiere al procesamiento de informacin no estructurada (video, audio) o semi-estructurada (bitcoras del web). Es tal la cantidad de datos que es impensable que un humano pueda realizar el anlisis, por lo que el aprendizaje basado en mquinas ser fundamental. En el nuevo mundo de datos hay una variedad de nuevas tecnologas. Por ejemplo, hoy en da la respuesta a una bsqueda en sitios de bsqueda como Bing es distinta para cada usuario, las recomendaciones son especficas para el usuario de entre millones de combinaciones. Mediante Bing ser posible extender aplicaciones de negocio, por ejemplo obtener el sentimiento de medios sociales de un producto en una zona geogrfica. IntoNow me parece un interesante ejemplo del nuevo conjunto de tecnologas que hacen posible la magia de mejorar en tiempo real nuestro entendimiento. Sugiero leer http://swgu.ru/sg3408 En los aos por delante, un rea de gran accin ser la de los datos como plataforma y tecnologas asociadas. Aunque la privacidad de datos continuar siendo tema de discusin, eventualmente las empresas explorarn la venta de datos. Emprendamos pues una conversacin al rumbo de la autntica economa de la informacin.

Luis Daniel Soto Maldonado es Director de Technical Product Management para SQL Server en Microsoft Corporation. @luisdans

>> Por Luis Daniel Soto

www.sg.com.mx |

Software Guru

.HERRAMIENTAS Y TECNOLOGAS TuToriaL

Versionando con Gitcomprendiendo los comandos bsicosn este artculo explico los aspectos bsicos para aprender a usar el sistema de control de versiones (VCS) Git. Para explicar mejor el funcionamiento de Git, estaremos usando la lnea de comandos. Mi recomendacin para entender Git es entender los conceptos con los comandos asociados, y despus si as se desea, buscar alguna interfaz diferente ms acorde a los gustos personales.

Por Javier Novoa

E

El modo Git

Muy al contrario de como se maneja un VCS tradicional (como Subversion), Git maneja los repositorios, y los conceptos mismos de un VCS de una manera particular. Mientras que para Subversion, el control de versiones se hace archivo por archivo, sobre cada directorio que integra un proyecto, para Git el control de versiones se hace sobre los distintos snapshots que se tomen de todo el proyecto. La diferencia radica en que para sistemas como Subversion, cada versin del proyecto incluye la versin de cada uno de los archivos del mismo. Mientras tanto, para Git cada versin del proyecto incluye solamente un manifiesto con las diferencias de cada archivo, es decir de cmo se ve el proyecto en su totalidad en determinado momento. Entendiendo Git as, ser fcil adaptarse a su modo de funcionamiento, e incluso salir de usar un VCS centralizado y comenzar a usar la genial idea que representan los VCS distribuidos.

tener su cdigo fuente para compilarlo y usarlo, o para mirarlo - y admirarlo. Para esto, lo que debemos hacer es clonar el repositorio origen del proyecto para as tenerlo como un repositorio local. Los repositorios git tienen una URL, y con ella se utiliza el comando: git clone [url] para clonar el repositorio remoto a un repositorio local sobre el cual trabajar. Para los ejercicios de este artculo utilizaremos un repositorio que ya he creado, as que para clonarlo hay que ejecutar lo siguiente desde lnea de comandos:$ git clone git://github.com/jstitch/masterm.git

Esto clonar el repositorio remoto y crear un repositorio local bajo el directorio masterm. De tal forma que ahora podemos entrar a nuestro directorio local y ver los archivos. Si se observa el contenido de los archivos ocultos de este directorio, se podr notar un directorio .git. Si no se ha hecho an, es necesario indicarle a Git los datos que utilizar el sistema para saber qu usuario ser el responsable de los cambios hechos. De otra manera no tendra sentido usar un VCS, sin tener a quin echarle la culpa, perdn digo darle gracias, por los cambios hechos al cdigo. Esto se logra con los siguientes comandos:$ git config --global user.name Tu nombre $ git config --global user.email [email protected]

Generando un repositorio

El primer paso para utilizar Git es tener un repositorio. El repositorio Git se representa por un directorio especial llamado .git y que reside en el directorio raz del proyecto mismo. Git slo genera un nico directorio para todo el repositorio, en donde almacena toda la informacin del mismo (versiones, historial, etc.). Hay dos maneras de generar un repositorio para trabajar con Git sobre un proyecto: a) Inicializando un directorio como repositorio Git. Suponiendo que se tiene un directorio en el que reside el proyecto a versionar, el comando git init crea el repositorio para el proyecto dado. Esta generacin del repositorio es completamente local a la mquina y el directorio donde reside el proyecto.$ cd proyecto $ git init

Usando el repositorio local

b) Copiando un repositorio Git. Ahora supongamos que deseamos colaborar en algn proyecto (o simplemente queremos ob12

El funcionamiento bsico de Git consiste en trabajar de forma local lo ms posible: modificando archivos, generando branches, haciendo merges entre branches, agregando los archivos con cambios que se deseen versionar, versionndolos y as sucesivamente. Solamente cuando ya se tiene un conjunto de cdigo y cambios hechos y probados se procede a mandarlos al repositorio origen desde el cul se clon (o a solicitar que se integren los cambios hechos al mismo en caso de no tener los permisos adecuados). En resumen, se utiliza git add para agregar los cambios a los archivos que se desea que Git tome en cuenta para la siguiente versin del cdigo, git status y git diff para observar los cambios puntuales que se realizarn para la siguiente versin y git commit para almacenar dicha versin en el historial del repositorio. Este es el flujo principal que se sigue al trabajar con Git, y hay que destacar que todo se hace de manera local, sin interaccin con repositorios remotos: recurdese que se est trabajando sobre un repositorio local y que precisamente ste es el sentido de los VCS distribuidos.

.HERRAMIENTAS Y TECNOLOGAS TuToriaL

git add. Inicialmente, ningn cambio a ningn archivo sobre el que trabajemos, es considerado por Git para versionar. Es necesario hacer un git add para que Git sepa en particular qu archivos con cambios sern versionados. Esto proporciona un control muy fino del proceso de versionado. En sistemas como SVN si un archivo es considerado para versionar, lo es desde que es agregado al repositorio y hasta siempre. Si deseamos modificar este archivo an cuando esa modificacin no tenga nada que ver con las modificaciones a otros archivos, el proceso de commit se llevar de una sola vez a todos los archivos versionados. En Git sin embargo tenemos la opcin de elegir puntualmente qu archivos con cambios se van a versionar. As, si hacemos una modificacin que sea una correccin de un bug en varios archivos, y a la vez modificamos otros archivos para corregir errores de tipografa en la documentacin, Git nos permite versionar cada una de estas modificaciones por separado, permitiendo identificar ms fcilmente qu archivos cambiaron como parte de qu modificacin, sin confundir con otros archivos relacionados a otras modificaciones. Por ejemplo:$ touch new_file $ echo >> README.md $ git status

Git utiliza diff para esto mismo, como puede verse en el siguiente ejemplo:$ echo hola mundo >> new_file $ git diff

El mensaje de resultado nos indica que Git detecta cambios que no han sido marcados para versionarse en el archivo new_file. Si se deseara ver las diferencias que Git detecta tomando en cuenta los cambios en los archivos que ya fueron marcados para versionar, aunque todava no se les haya hecho commit, se utiliza el parmetro --cached. Por ltimo, si lo que se desea es ver todos los cambios, tanto de lo marcado para versionar como lo que no, se le pasa a git diff como parmetro la versin contra la cual se quiere comparar el cdigo actual. El nombre HEAD se refiere a justamente la ltima versin que se tiene almacenada el repositorio.$ git diff HEAD

$ git commit -m cambios al README y creando new_file

$ git add README new_file $ git status

Branches y Merges

Y ahora s, Git sabe que ambos archivos deben ser versionados. git status. El comando git status, que ya utilizamos, nos permite conocer el estatus con el que Git tiene identificado a los archivos del proyecto. Se puede agregar la opcin -s para que nos entregue una respuesta resumida. En dicho caso, el estatus aparece en dos columnas: la primer columna indica los cambios que har Git en la siguiente versin del cdigo, y la segunda columna indica cambios que Git reconoce como tales pero que no versionar. git diff. Otra operacin muy comn al trabajar con archivos versionados es la de observar y analizar los cambios hechos, as como las diferencias entre la nueva versin y la que se tiene en una versin anterior.13

Para los provenientes de VCS centralizados como SVN, muy probablemente el nombre Branch ya dibuj en su mente la idea de una pesadilla dantesca. La realidad es que el manejo de branches en versionadores centralizados suele convertirse en una molestia ms que en una herramienta til. Tan es as que muchos proyectos renuncian a su uso y se dedican nicamente a versionar sobre un rbol principal de cdigo, dejando de lado una de las ventajas esenciales que proporciona un versionador. Pero la buena noticia es que en los versionadores distribuidos, y en Git en particular, el manejo de branches es, dicho llanamente, maravilloso. Una manera de entender los branches en Git es verlos como contextos en los que se trabaja una versin especfica del cdigo. Digamos que bajamos el cdigo fuente de un software que utilizamos mucho y detectamos un bug. El modo Git de afrontarlo sera, luego de clonar el repositorio, crear un branch y ah trabajar la correccin del bug.

www.sg.com.mx |

El resultado que obtendremos ser el estatus de git, reconociendo que se modific un archivo existente (README.md) y se agreg uno nuevo (new_file), pero ninguno de los dos est contemplado para incluirse en el prximo commit. Para que sean considerados debemos agregarlos:

Como se puede observar, con el argumento -m indicamos un mensaje descriptivo de esta versin. Este es obligatorio. Si ahora verificamos el estatus con git status, veremos que slo queda un cambio detectado por Git: aquel que hicimos posterior al git add, y por lo tanto no est marcado todava para ser versionado.

Software Guru

git commit. Finalmente, una vez hechos los cambios deseados y agregando a los archivos que se desea sean incluidos en esta versin, se realiza el commit al repositorio (recurdese: es local, no hay necesidad de conexin a la red todava!):

.HERRAMIENTAS Y TECNOLOGAS TuToriaL

Si adems resulta que tenemos una propuesta de mejora al software, lo correcto desde el punto de vista del modo Git de trabajarlo sera crear otro branch a partir del original (o maestro) y ah trabajar los cambios. Finalmente cuando el bug est corregido, se integran (va merge) con el branch maestro. Y cuando nuestros cambios estn hechos y probados tambin, se hace lo mismo desde aquel otro branch al maestro de nuevo. As, al final, se tiene un cdigo limpio, probado y bien versionado, todo gracias al uso de branches. Los comandos principales para el manejo de branches son: git branch para crear branches git checkout para hacer cambio de contextos git merge para unir branches Otra caracterstica notable del manejo de branches de Git es que los branches no se creados como subdirectorios separados como en SVN. Ms bien, el directorio .git contiene toda la informacin (en forma de snapshots o diferencias entre cada archivo y sus branches), y as en un slo directorio de trabajo del proyecto, al cambiar de contexto, todo el cdigo del mismo directorio pasa a ese nuevo estado. Se puede cambiar entre contextos libremente y sin prdida de informacin, y sin el estorbo de un directorio dedicado a cada branch del proyecto. git branch y git checkout. Al crear un nuevo repositorio en Git, por defecto se tiene un nico branch, el inicial o principal del proyecto. Se le llama master por default. El comando git branch lista todos los branches existentes actualmente en un proyecto. En caso de haber varios, uno de ellos ser marcado con un asterisco, para indicar cual es el branch o contexto actual. Para crear un nuevo branch, se utiliza el comando git branch [nombre_del_branch].$ git branch testing $ git branch

Si hacemos un git status, nos indica que los cambios que no se han marcado para versionar (recuerden que new_file an tiene cambios sin marcar) pasan entre contextos de manera transparente. Si ahora marcamos algn cambio para versionar en uno de los contextos:$ git add new_file $ git status -s $ git checkout testing $ git status -s

Como se puede observar, aqu tambin los cambios marcados para versionar pasan transparentes entre contextos. Git no puede saber si la marca agregada para versionar es para uno u otro contexto, y slo sabr informacin ms concreta hasta hacer un commit:$ git commit -m agrego texto a new_file, como prueba

Y ahora s, los cambios hechos a new_file quedan en el branch testing, no en la rama principal. Si vemos el contenido de new_file, veremos que tiene el texto hola mundo que agregamos. Pero si nos regresamos al branch masterm_lang, veremos que new_file aqu no tiene el texto hola mundo. Solamente est en el branch testing, que es donde se hizo el commit de ese cambio.$ git checkout masterm_lang $ cat new_file

git merge. Supongamos que ahora deseamos que el cambio en testing quede reflejado tambin en masterm_lang. Lo que debe hacerse es un merge, una operacin que la mayora de las veces Git puede hacer por su propia cuenta.$ git branch $ git merge testing $ cat new_file

Como se puede observar, ya existe un nuevo branch en el proyecto (testing). Este branch est hecho a partir del cdigo en su ltimo estado: tanto los ltimos commits como los archivos con cambios que han y no han sido aadidos para versionar. Y para pasar a ese nuevo contexto y trabajar sobre l, se utiliza git checkout [nombre_ del_branch]:$ git checkout testing $ git branch

Ahora es testing el contexto actual sobre el que se trabajar en el proyecto. Si hacemos algunos cambios en un archivo, y luego regresamos al contexto original (masterm_lang), como no se le indic a Git que los cambios se iran a versionar en ese contexto, los cambios pasan transparentes entre contextos:$ echo hola README >> README.md $ git checkout masterm_lang

Pero qu pasara si otro usuario hubiera hecho cambios a new_ file sobre masterm_lang antes que nosotros hubiramos hecho el commit? Entonces Git generara lo que se conoce como un conflicto, que no es otra cosa sino la forma en que Git indica que no sabe como hacer el merge por s solo y necesita de la ayuda externa de los usuarios. Los conflictos no ocurren siempre, incluso aunque muchos usuarios hagan cambios al mismo archivo muchas veces. Bsicamente si los cambios se hacen sobre lneas diferentes del dicho archivo, Git sabr hacer el merge sin problemas. Es cuando se hacen cambios que inmiscuyen lneas iguales en el archivo cuando Git puede verse en problemas... vemoslo con un ejemplo, recordando que an hay un cambio sin versionar en README:$ git checkout testing $ git add README.md $ git commit -m agrego cambio a README esperando generar conflicto en master

14

.HERRAMIENTAS Y TECNOLOGAS TuToriaL

Hasta aqu versionamos el cambio al branch testing...$ git checkout masterm_lang $ echo hello README >> README.md $ git add README.md $ git commit -m agrego cambio a README esperando conflicto en merge

do los branches y los posibles merge hechos entre ellos. git tag. Para terminar con este asunto de los branches, vamos a mencionar los tags. Casi cualquier versionador permite manejar este concepto (unos ms fcilmente que otros). La idea detrs de un tag es tener una especie de fotografa fija del proyecto en cierto momento. De esa forma, cuando se quiera tener el cdigo del proyecto justo como se tuvo en el momento de tomar la fotografa, simplemente uno va al tag y lo recupera. Esto es sumamente til cuando, por ejemplo, se tiene el proyecto en un estado listo para liberar a un entorno de produccin, digamos que ya tenemos la versin 1.1.2 y queremos liberarla. Entonces se genera un tag del momento del proyecto deseado, se le etiqueta como versin 1.1.2 y listo. Git tiene la informacin que nosotros podemos usar cuando deseemos, por ejemplo regresamos el cdigo al estado de ese tag y luego empaquetamos o compilamos o lo que fuera necesario...$ git tag -a v1.1.2 $ git log --oneline --decorate --graph

Ahora regresamos a masterm_lang y ah hicimos un cambio diferente sobre el mismo archivo, en la misma lnea (la ltima) que el cambio que se version en testing. Todo eso antes del merge. Y ahora a ver que pasa:$ git merge testing $ git status -s $ tail README.md

git log. Un sistema que maneja tan eficientemente tanta informacin como Git no sera nada til si no permitiera tambin mostrar de manera ordenada dicha informacin al usuario, de forma que l pueda saber con exactitud algn pedazo que le sea realmente til. Para eso existe git log. Este comando tiene en realidad muchos usos y muchas formas diferentes de generar y reportar la informacin con que cuenta Git, por lo que veremos solamente algunos ejemplos que podran ser tiles:$ git log

$ git tag -l

Conclusin

git log muestra en bloques cada uno de los commits que se han hecho dentro del branch actual. Se puede observar que entre la informacin mostrada para cada commit, adems del mensaje, autor y fecha, se da una cadena de identificacin. Este identificador de los commit se puede usar como parmetro a comandos como git diff para comparar el estado actual del proyecto contra alguna versin especfica. git log puede usar algunos parametros opcionales. Con el parmetro --oneline se muestra solamente el identificador corto y la descripcin del mismo, para un resumen breve. Con el parmetro --graph se puede ver incluso de manera visual cmo han evoluciona15

En este tutorial aprendimos los aspectos bsicos para manejar un repositorio git local. El siguiente paso es aprender a interactuar con un repositorio remoto. Por razones de espacio no se ha incluido esa seccin aqu, pero pueden consultarlo en la versin original y completa de este artculo, que est disponible en http://swgu.ru/sg3407.BIOJavier Novoa es ingeniero en sistemas con maestra en ciencias de la computacin con preferencia por la administracin de servidores GNU/Linux y el desarrollo en Python/PHP/Java/C++. Radica en la Ciudad de Mxico y es fantico de la literatura fantstica, la astronoma amateur, el ajedrez y la msica rock. [email protected] @JaviStitch

www.sg.com.mx |

Software Guru

Qu sucedi? Pues que Git no supo qu hacer y gener un conflicto al hacer el merge. Este conflicto queda marcado para Git (segn el resultado de git status -s, y tambin dentro del mismo archivo README, como puede verse por los marcadores que se agregaron automticamente al archivo en los lugares en donde ocurri el conflicto. Para resolver el conflicto, se necesita la intervencin humana. Normalmente aqu es donde los desarrolladores responsables de los cambios que ocasionaron el conflicto se baten en duelo y se ponen de acuerdo para decidir cmo resolver el conflicto. Al final, uno de los desarrolladores deber editar el archivo con conflicto, dejar el cambio adecuado y retirar las marcas de conflicto (>) que coloc Git. Esto lo puede hacer editando manualmente el archivo o con alguna herramienta de resolucin de conflictos, invocando git mergetool.

Como se puede observar, al usar el parmetro --decorate de git log (que muestra ms informacin sobre los branches), tambin se muestra ahora el tag que acabamos de generar para el HEAD del repositorio. Obviamente, tambin se puede dar tag a alguna versin diferente al HEAD, para lo cual al comando git tag simplemente se le agregara el identificador del commit al que deseemos ponerle el tag. Para pasar el cdigo de un tag a otro, se puede usar el mismo comando git checkout, pero en lugar de usar el nombre de un branch como parmetro, se usa el nombre dado al tag (tambin se puede usar el identificador de un commit cualquiera). El parmetro -l nos informa de todos los tags que tenga creados el repositorio:

.HERRAMIENTAS Y TECNOLOGAS novedades

WebSocketseventos a tiempo real en nuestro navegador

Por Gonzalo Ayuso

HTML5

ha llegado. La quinta revisin de HTML nos trae muchas novedades y los WebSockets es una de ellas, que tendr un gran impacto en la forma en que desarrollamos aplicaciones web. Los WebSockets son dos estndares en uno: el estndar del protocolo de comunicaciones desarrollado por el IETF; y el estndar de la API JavaScript para utilizarlos en nuestras pginas Web. En este artculo vamos a ver qu son y cmo funcionan.

En el navegador. Los navegadores tampoco estn preparados para mantener conexiones abiertas con el servidor durante un tiempo indefinido. En teora funciona, pero en la prctica las conexiones terminan muriendo. En resumen, tenemos un modelo de aplicacin web llamado COMET que en teora nos permite hacer notificaciones a tiempo real en el navegador, pero en la prctica tenemos problemas con los servidores y con los navegadores. Para resolver los problemas en el lado del servidor podemos usar servidores alternativos a los tradicionales. Por ejemplo, un servidor hecho con Node (node.js) puede funcionar muy bien para manejar conexiones de este tipo, gracias a la naturaleza no-bloqueante de Node. Resolviendo el problema del servidor, ahora enfoqumonos en el navegador. Aqu normalmente usamos tcnicas para simular eventos en tiempo real. Lo ms comn es hacer ShortPolling, que bsicamente consiste en preguntar al servidor cada x segundos si ha habido algn evento, para ello se usa un timer con JavaScript (setInterval o setTimeout) o la histrica etiqueta meta http-equiv=refresh. Es como cuando viajamos con nios en coche y nos preguntan cada 5 segundos si falta mucho para llegar. Esta tcnica cumple el propsito, pero no es escalable. Por otro lado tenemos el Long-Polling que consiste en dejar abierta una conexin hasta que haya informacin nueva para enviar al navegador. Tampoco es una solucin ideal porque sobrecargamos los recursos de nuestro servidor, y podemos encontrarnos con timeouts.

Antecedentes

Antes de comenzar, hagamos un poco de historia y remontemos unos aos atrs. Imaginemos que queremos hacer una aplicacin con comunicacin a tiempo real, como por ejemplo un chat. La aplicacin es muy simple. Un cuadro de texto donde el usuario introduce un mensaje, un botn para enviar y un listado con los mensajes del chat. Si nos planteamos hacer esta aplicacin en un cliente pesado, el desarrollo es trivial. Abrimos un puerto y lo ponemos a la escucha para que actualice la lista de mensajes cuando alguien crea un mensaje nuevo. El problema est cuando queremos hacer esta misma aplicacin en el navegador web. Bsicamente, el dilema est en que no podemos abrir un puerto en el navegador y ponerlo a la escucha, tal y como lo haramos con una aplicacin de escritorio. Podemos hacer algo usando tecnologas como Flash o Java Applets, pero no es el escenario ideal y es muy probable que tengamos problemas con firewalls. Si nos centramos en el protocolo HTTP, vemos que podemos mantener abierta la conexin e ir enviado informacin poco a poco usando tecnologa Push, este nuevo modelo de aplicacin Web se denomina COMET. En teora es perfecto, pero en la prctica tiene algunos inconvenientes: En el servidor. Los servidores web tradicionales no estn diseados para este tipo de cosas. Nos encontramos directivas del tipo keep-alive y MaxClients. Los servidores Web, en sus configuraciones por default, interpretan que estas conexiones que mantenemos abiertas mucho tiempo, son scripts que se nos han quedado colgados, y las cierran.16

WebSockets

Afortunadamente, con la llegada de HTML5 nos llegan los flamantes WebSockets. Bsicamente es la solucin a todos los problemas mencionados con anterioridad. Los nuevos WebSockets nos dan una interface JavaScript para manejar conexiones no bloqueantes con el servidor. El listado 1 muestra un ejemplo de uso de WebSockets en el navegador.

.HERRAMIENTAS Y TECNOLOGAS novedades

var ws = new WebSocket(url); ws.onopen = function() { // When the connection opens }; ws.onmessage = function() { // When the server sends data }; ws.onclose = function() { // When the connection is closed }; ws.send(Hi all); // later... ws.close();Listado 1. Uso directo de WebSockets en el navegador.

Como podemos ver, el interface es similar al de los WebSocket. Esto viene acompaado de la parte del servidor, que socket.io la implementa por medio de node.js:var io = require(socket.io).listen(80); io.sockets.on(connection, function (socket) { socket.emit(news, { hello: world }); socket.on(my other event, function (data) { console.log(data); }); });Listado 3. Implementacin de servidor en Socket IO.

Genial, no? Entonces, del lado del servidor resolvemos nuestros problemas implementando un servidor en Node y del lado del cliente utilizamos WebSockets. Asunto resuelto ... bueno, no en realidad, no cantemos victoria todava. Desgraciadamente, los WebSockets no estn soportados en todos los navegadores. Nuestro gozo en un pozo. Tenemos la tecnologa, pero tenemos que esperar a que todos nuestros usuarios usen navegadores de ltima generacin (incluso que los navegadores incorporen esta nueva especificacin a sus versiones estables).

Socket IO soporta los siguientes modos de transporte: WebSocket Adobe Flash Socket AJAX long polling AJAX multipart streaming Forever Iframe JSONP Polling Esto le permite soportar una amplia lista de navegadores y versiones, que incluye: Internet Explorer 5.5+, Safari 3+, Google Chrome 4+, Firefox 3+, Opera 10.61+, iPhone Safari, Android WebKit. As es, incluso IE 5.5 es soportado, y todo esto usando el mismo interface para el desarrollador.Software Guru

Socket IO al rescate

Entonces Podemos usar WebSockets hoy? Pues la respuesta es s. Y digo s con rotundidad gracias a una gran libreria llamada Socket IO (socket.io). Socket IO es, por decirlo de alguna manera, el jQuery de los WebSockets. La gracia de esta genial librera es que no necesita un navegador que soporte WebSockets. Si nuestro navegador los soporta, los usar. Si por lo contrario usamos un navegador ms viejo, socket.io emular el comportamiento de los WebSockets usando el mejor modo de transporte soportado por ese navegador, y todo esto de una forma transparente para nosotros. El listado 2 contiene un cdigo en javascript que ejemplifica como podemos usar socket.io en el navegador. var socket = io.connect(http://localhost); socket.on(news, function (data) { console.log(data); socket.emit(my other event, { my: data }); }); Listado 2. Cdigo para cliente con Socket IO.

Por donde empezar

Gracias a Socket IO podemos tener notificaciones a tiempo real de forma sencilla y soportada por prcticamente todos los navegadores. Un sueo imposible hace unos aos, al alcance de nuestra mano a da de hoy. Merece la pena echarle un vistazo.

Referencias[1] Socket IO. http:/ /socket.io [2] WebSocket. http:/ /websocket.org [3] D. Zavala. Introduccin a Node.js. http:/ /swgu.ru/intro_node

.BIOGonzalo Ayuso es Desarrollador y arquitecto web con ms de 10 aos de experiencia, especializado en tecnologas open source. Puedes leerle en su blog http://gonzalo123.wordpress.com y seguirle en @gonzalo123.

17

www.sg.com.mx |

Fotografa cortesa de Santiago Zavala.

Generacin de Modelos de Negocio pilar del emprendimientoonstantemente le pregunto a mis alumnos de la Maestra de Negocios del ITESO en Guadalajara, a los participantes del Bootcamp en TechBA Silicon Valley y en los Startup Weekends qu es ms importante: un excelente producto o un excelente modelo de negocio? Y normalmente llegamos a la misma conclusin, es ms importante tener un buen modelo de negocio. Tal y como menciona Henry Chesbrough: A mediocre technology pursued with a great Business Model may be more valuable that a great technology exploited via a mediocre Business Model. Del artculo de Reinventing your Business Model de Harvard Business Review [1] destacar dos cifras que dan una idea de la importancia del concepto. 1. 11 de las 27 compaas nacidas en los ltimos 25 aos y que han crecido hasta estar dentro de las Fortune 500 en los ltimos diez aos, lo hicieron a travs de la innovacin en sus modelos de negocio. 2. Una encuesta del 2005 practicada por la Unidad de Inteligencia de The Economist, report que ms del 50% de los ejecutivos creen que la innovacin en el Modelo de Negocio llegar a ser ms importante para el xito que la innovacin en productos y servicios. Con el propsito de generar un entendimiento comn sobre el concepto de Modelo de Negocio les pido hacer una reflexin, pregunten a la gente que tengan alrededor, qu es un Modelo de Negocio? Apuesto a que una gran parte de ustedes obtuvieron la siguiente respuesta es la18

C

Por Vctor Reyes

manera en que hacemos dinero. Esta respuesta es parcialmente correcta, ya que la corriente de ingresos es uno de los nueve elementos del modelo, al igual que la frmula de rentabilidad, pero no lo es todo. El Modelo de Negocio es cmo la compaa crea, entrega y captura valor. Alexander Osterwalder es un renombrado consultor en innovacin y modelos de negocio que se dio a la tarea de crear algo que haca mucha falta: un texto metodolgico completo sobre modelos de negocio. Es as que en 2010 en conjunto con Yves Pigneur public el libro Business Model Generation: A Handbook for Visionaries, Game Changers, and Challengers [2]. La metodologa planteada por Osterwalder plantea de forma simple y puntual los elementos bsicos pero suficientes para integrar el negocio. No se necesita un extenso documento con decenas o cientos de pginas que diga cmo se quieren generar los ingresos para la compaa. Debemos ser capaces de mostrar en una sola imagen todos los elementos que le dan viabilidad y sustentabilidad a nuestro negocio.

Los nueve bloques constructores

El modelo se describe a travs de nueve dimensiones o bloques que muestran la lgica de cmo una compaa pretende ganar dinero y la interaccin entre cada uno de los bloques. Dichos bloques se ilustran en la figura 1. Obviamente, la definicin de modelo tendr que ver con la necesaria interconexin o interrelacin entre todos los bloques, los cuales

.EMPRENDIENDO indusTria

El ModElo dE NEgocio Es cMo la coMpaa crEa, ENtrEga y captura valor.

ingresos llegarn a la compaa si esta entiende bien cul es el valor por el cual los clientes realmente estn dispuestos a pagar. Aqu encontramos varias maneras en cmo se pueden generar esos ingresos: por la venta de un producto, cobrar suscripciones, renta, licenciar propiedad intelectual, publicidad, etc. Actividades clave. Este bloque describe las actividades ms importantes que una compaa debe hacer para que su modelo de negocio funcione. Dichas actividades pueden ser divididas en produccin, que tiene que ver con la entrega fsica de un producto; de solucin de problemas o de creacin de una plataforma. Recursos clave. Este bloque incluye a los recursos o activos que se requieren para desempear dichas actividades clave. Los recursos pueden ser materiales, financieros, humanos y ms importante an, intelectuales como patentes, marcas, etc. Alianzas clave. Describe la red de proveedores y socios que se requieren para que el modelo funcione adecuadamente, creando dichas alianzas sobre todo para optimizar el modelo por economas de escala, la reduccin de riesgo e incertidumbre o la adquisicin de recursos para el desempeo de ciertas actividades. Pueden ir desde una simple relacin proveedor-comprador hasta una alianza estratgica. Estructura de costos. Cules son los costos que se generan a propsito de las actividades y los recursos necesarios para desempearlos. Las estructuras de costos se pueden basar en dos enfoques principalmente: aquellos guiados por el costo y aquellos guiados por el valor. El primer enfoque se basa en minimizar el costo al mximo posible, mientras que el segundo se centra en el costo que sea necesario para crear el valor necesario para entregar. La expresin grfica del modelo se lleva a cabo en lo que se llama el Business Model Canvas que proviene y recuerda al lienzo de un pintor. Normalmente lo desarrollamos a travs de talleres con expertos en los temas dentro de una empresa, y es una actividad colaborativa que busca fomentar el entendimiento, discusin, creatividad y anlisis. Se puede desarrollar de manera fsica en un poster en donde podemos pintar o pegar notas o de manera electrnica en donde ya existe la aplicacin para iPad creada por el propio Osterwalder..BIOVctor Reyes ha tenido una trayectoria de ms de 20 aos en puestos gerenciales y directivos en los sectores privado y pblico. Es ex Director de Negocios de Innovacin del CONACYT y actualmente es fundador, cofundador y/o participante activo de varias iniciativas que buscan impulsar el emprendimiento e innovacin tecnolgica como MexicoInnova, INPROTEC, Startup Dojo, Mexican VC, Startup Weekend, TechBA Silicon Valley. @vmreyesp

Figura 1. Los 9 bloques del modelo de negocio.

no se pueden ver de manera aislada; unos son consecuencia de otros y por lo tanto se trata de poder construir un flujo basado en ellos. En el centro est la propuesta de valor, hacia el lado derecho a quin se entrega y cunto nos genera y en el lado izquierdo cmo se construye y cunto nos cuesta. Siguiendo la lgica anterior explicaremos brevemente a qu se refiere cada bloque. Segmento de clientes. Este es el primero de los bloques con el cual se debe iniciar la lgica del modelo, debiendo entender cul es el racional en base al cul vamos a segmentar al grupo de personas u organizaciones que vamos a servir, cul es su necesidad a satisfacer y una vez entendida, se puede disear el modelo de negocio. Propuesta de valor. Describe cul es el paquete de productos y servicios que crean valor para esos segmentos especficos de clientes. Es lo que hace a las compaas nicas y diferentes y por lo cual sus clientes van a preferirlos por sobre otras empresas. Se basa en la satisfaccin de problemas o necesidades de los clientes entregndoles beneficios valiosos. Algunos de los elementos que crean valor para los clientes pueden ser la novedad, la mejora en desempeo, la individualizacin, el precio, la reduccin de riesgos, la conveniencia, etc. Canales. Cmo una compaa se comunica y llega a sus segmentos de clientes para entregar la propuesta de valor. Son los puntos de contacto que juegan un papel importante en la experiencia de usuario del cliente. Aqu la principal definicin es si los canales sern directos o indirectos, lo que obviamente tiene una afectacin en margen pero puede potenciar el alcance. El balance adecuado ser el que maximice los ingresos. Relaciones con clientes. El tipo de relaciones que se mantengan con los clientes es fundamental para la adquisicin, retencin y crecimiento de los clientes y obviamente tendr una relacin directa con el canal que se haya elegido. Flujos de ingresos. Representa el efectivo que la empresa genera de cada segmento de clientes. Bsicamente los ingresos pueden ser de dos tipos, transaccionales, de nica ocasin, o recurrentes. Los19

Referencias:[1] M. W. Johnson, et al. Reinventing your Business Model. Harvard Business Review, December 2008. http:/ /swgu.ru/sg3405 [2] A. Osterwalder & Y. Pigneur. Business Model Generation. http:/ /swgu.ru/r3406

www.sg.com.mx |

Software Guru

SG Conference & Expo 2011Por Equipo organizador

Integrando la comunidad de Profesionistas de TI

a sexta edicin del evento insignia de Software Gur se llev a cabo exitosamente el pasado 7 y 8 de septiembre en la Cd. de Mxico. A lo largo de dos das, el evento logr reunir a ms de 800 dignos representantes de la industria de TI, as como a reconocidos ponentes nacionales e internacionales, contando con la participacin de prestigiadas empresas de la industria de software a nivel global. Como ya es costumbre este evento fu el punto de reunin de los ms destacados profesionistas, hackers y emprendedores de TI, que compartieron su experiencia y conocimiento fomentando una excelente dinmica de networking. Con gran gusto nos encontramos con asistentes que nos acompaan y colaboran con SG desde el primer congreso, y es un orgullo saber que de alguna manera hemos apoyado al desarrollo de estos profesionistas.20

L

.ESPECIAL resea

La entradaLa inauguracin se llev a cabo por el Director y socio fundador de Software Gur, Pedro Galvn, quien adems de reconocer el esfuerzo de los participantes por asistir al evento, comparti con la audiencia el futuro y visin de SG, presentando nuevos productos como SG Talento y Nearshore Link. El evento fu moderado por la coordinadora editorial de la Revista SG, Vanessa Amaya, y cont con la participacin de Elizabeth Argello, Directora de Economa Digital de la Secretara de Economa, quien nos comparti su visin de la industria de TI, as como los avances que han tenido los diversos Programas que la apoyan.

Alcanza para todos: La Feria de ReclutamientoAcompaando al lanzamiento de SG Talento, se realiz la feria de reclutamiento Buscando Talento, organizada en conjunto con la empresa Empleos TI, durante la cual las empresas participantes contactaron con diversos profesionistas. Las empresas participantes fueron: Kelly IT Resources, 4thSource, Neoris, Porto Mx, Adecco, Congnizant, Tacit Knowledge, Softtek, IDS, Hildebrando, ABS, ScreenIT, Randstad, e-global Consultores, Nearsoft, IBM, Oracle, Alpha Consultoria, App Studios, Global Lynx, Extend Solutions, Infotec, Ironbit y Ultrasist.

El plato fuerteY de la entrada nos fuimos directo al plato fuerte, ya que los conferencistas magistrales nos compartieron una diversa gama de interesantes temas. Iniciamos con el keynote Fact and Fallacies of Software Development presentado por Venkat Subramaniam, fundador de Agile Developer, Inc. quien demostr su experiencia de haber entrenado y asesorado a miles de desarrolladores de software y con una ponencia sumamente amena logr la participacin activa de la audiencia. Finalizando el primer da, contamos con la pltica de Brad Hipps, Gerente de Soluciones de software en HP, quien comparti su experiencia en el ciclo de vida de las aplicaciones, y su implementacin en diversas organizaciones a nivel mundial. No poda faltar la participacin de expertos y apasionados desarrolladores de software Mexicanos, como fu el caso de Ral Guerrero, quien nos platic sobre la Gestin del Proceso de Desarrollo utilizando Scrum, donde comparti experiencias de su trabajo actual en Microsoft como Especialista en Herramientas de Desarrollo, as como recomendaciones gracias a su participacin activa en Comunidades. Ash Maurya inici las conferencias del segundo da, con el tema Running Lead, creador del libro que lleva el mismo nombre, material de referencia esencial para los emprendedores en la web, demostrando la razn por la cual es una de las figuras ms reconocidas en el mbito de los nuevos emprendimientos basados en tecnologa. Gustavo Garnica, fue el encargado de dar el toque final al plato fuerte, quien gracias a su amplia experiencia como Arquitecto Senior de Middleware, en proyectos para clientes en Mxico y LA, nos comparti la visin altamente esperada sobre el futuro de la plataforma Java.

La cereza del pastel: AppCircusAppCircus es una feria itinerante, escaparate de las aplicaciones mviles ms creativas e innovadoras, que en esta ocasin se present en SG Conference & Expo. Durante esta dinmica 10 emprendedores presentaron sus aplicaciones. El ganador fue Jos Balczar de la empresa Huawei, quien ahora tiene la oportunidad de pertenecer a las apps nominadas para los Mobile Premiere Awards (MPA) 2012 en Barcelona. AppCircus fue patrocinado por BlueVia.

La CharlaTodo momento fue aprovechado para networking, visitas a Expo, las comidas, y los deliciosos startup-waffles, que fomentaron la convivencia entre los participantes, quienes crearon nuevas relaciones y se reencontraron con colegas.

El Postre: La ExpoLa Expo cont con la participacin de diversas empresas y organismos, a quienes reconocemos su compromiso con la industria y agradecemos su apoyo: Oracle, HP, Infotec, Pronatura, Microsoft, Global Lynx, Mxico First, Blackberry, Qualtop, Alpha Consultora, Vinkos, Fumec, Ironbit, Ultrasist, AppStudios, CIAPEM, CANIETI, AMITI, emprende.la, CITI Tabasco, IJALTI y al Consejo de Software de Nuevo Len. En especial agradecemos a Secretara de Economa por apoyar al evento mediante el programa Prosoft 2.0.

El Digestivo: La Noche de casinoSiendo un evento tan esperado, quisimos celebrarlo en grande jugando y apostando, donde los asistentes vivieron una noche divertida, con baile, bocadillos y brindis. Y para los que no les late el casino, jugaron como nios con el Kinect. El ambiente era de total algaraba y esta se agrand al participar en la subasta de grandes premios. La preparacin y realizacin del evento fueron una ardua labor, que finalmente gracias a la mezcla de contenidos de alta calidad, entusiastas asistentes, y una logstica excepcional, logramos un delicioso men, consolidando una vez ms a SG Conference & Expo como un evento de clase mundial.

Una variada ensalada: Ignite sobre emprendimientoCon una combinacin de mltiples ponentes, quienes en 5 minutos nos compartieron sus ideas, perspectivas, propuestas relacionadas a la creacin y ejecucin de startups en Mxico, se present el Ignite dedicado al emprendimiento tecnolgico.

Para acompaar: Ms de 20 sesionesPara compartir el conocimiento y la prctica real, contamos con la participacin de los expertos locales, combinando una interesante agenda de conferencias.21

El Despertar del

Cmputo Fsicosignificativamente, y hoy en da contamos con herramientas ms sencillas, materiales accesibles, mayor estandarizacin y mucho mayor apertura. Todo esto ha provocado que el inters y popularidad del cmputo fsico est explotando. En las siguientes pginas hemos concentrado diversos artculos con informacin sobre algunos de los aspectos que consideramos ms relevantes sobre el cmputo fsico, desde el fenmeno provocado por Arduino y el open hardware, hasta la construccin y programacin de robots. Pero antes de continuar, les recordamos un pasaje del libro The Tao of Programming the Geoffrey James. Sin el viento, el pasto no se mueve. Sin software, el hardware es intil.

La mayora de nosotros, los profesionistas de software contemporneos, llevamos toda nuestra vida profesional programando software cuya interaccin con el mundo fsico se limita a recibir comandos de un teclado o mouse y entregar resultados desplegndolos en una pantalla. Ciertamente, esta modalidad de cmputo ha generado un mercado muy grande, y nos ha dado empleo, alegras, tristezas y muchas ancdotas.Sin embargo, no debemos olvidar que hay un mundo all afuera, un mundo fsico con distancia, peso, luz, sonido, tacto. Y en ese mundo tambin hay infinidad de oportunidades donde los sistemas de cmputo pueden aportar valor. El cmputo fsico se refiere a la utilizacin de dispositivos electrnicos para crear objetos interactivos que pueden interactuar con el mundo fsico utilizando sensores y accionadores controlados por el comportamiento programado en un microcontrolador. Anteriormente, crear sistemas de cmputo fsico era algo reservado para unos cuantos, no solo por la complejidad y diversidad de conocimientos requeridos, sino por la poca accesibilidad y alto precio de los materiales necesarios, as como la falta de estandarizacin. Pero en los ltimos aos esta situacin ha mejorado

22

23

.PRINCIPAL

www.sg.com.mx |

Software Guru

.PRINCIPAL

El ABC de la Programacin de unPor Miguel ngel Ramrez

Robot Humanoide

ms fcil de lo que crees

Abrir la puerta, jugar futbol, recordarle a una persona que tiene que tomar sus medicinas, leer correos electrnicos o bailar, son algunas de las funciones que los robots humanoides pueden realizar actualmente. Para lograrlo, existe software que permite simular comportamientos en un robot, aplicaciones para programar actividades complejas y herramientas de monitoreo. Esto se hace por medio de los ambientes de desarrollo y Kits de Desarrollo de Software (SDK) de los robots.La finalidad es tener bien claro qu quieres que tu robot haga, porque no slo para movimientos est hecho, sino tambin para sentir, interactuar, e incluso pensar por medio de inteligencia artificial. como su nombre lo indica es un lenguaje tipo Basic, pero especializado y orientado a robots. Este lenguaje te proporcionar comandos especficos para controlar al humanoide. Por medio de los simuladores de los ambientes de desarrollo, puedes probar fcilmente los nuevos comportamientos y comprobar que haces correctamente tu trabajo. Otra posibilidad consiste en crear nueva funcionalidad utilizando informacin de lo que el robot est viendo y sintiendo por medio de sus sensores. Este tipo de programacin tpicamente se hace en lenguajes como Python o C++, y aprovecha los SDKs que ofrecen los robots (la gran mayora de los robots actuales cuenta con SDKs). Quienes estn acostumbrados a desarrollar aplicaciones con tecnologas de Microsoft tal vez se sientan en casa usando Microsoft Robotics Developer Studio, la cual aprovecha las plataformas .NET y XNA adems de soportar el sensor Kinect. Adicionalmente, ya hay quienes estn experimentando con programar y controlar robots en tiempo real. Por ejemplo, la Universidad del Norte de Carolina lo est haciendo con xito, y han logrado que un robot NAO sirva azcar en una taza de caf con una cuchara, incluso sorteando obstculos inesperados. El campo de la programacin de robots humanoides se est desarrollando muchsimo. Tan es as, que la competencia RoboCup tiene como objetivo que para el ao 2050 un equipo de robots pueda competir en un juego de futbol contra los campeones de la FIFA. Por otro lado, algunas empresas ya han comenzado a crear app stores para aplicaciones robticas, de forma que usuarios de todo el mundo puedan descargar los desarrollos de otros.

Los robots

Existen distintas opciones de robots humanoides en el mercado. Posiblemente el ms popular es el robot NAO fabricado por la empresa francesa Aldebaran Robotics, y que es el utilizado en la competencia internacional Robocup, donde equipos de todo el mundo programan equipos de robot autnomos que compiten jugando futbol.

Herramientas y tecnologas de programacin

Antes, programar un robot era una tarea complicada. Sin embargo, hoy en da se cuenta con herramientas poderosas y bastante amigables. Generalmente, la programacin de robots se clasifica en varios niveles de complejidad con la finalidad de que los usuarios puedan ir escalando sus conocimientos y cada vez tener un mayor control sobre el comportamiento del robot y realizar actividades ms avanzadas. En el nivel bsico est la programacin visual utilizando ambientes de desarrollo como Choregraphe. En estas herramientas se cuenta con libreras de bloques de comportamiento predefinidos y se programa visualmente el comportamiento del robot al arrastrar y conectar dichos bloques, creando as una secuencia de actividades o coreografa. La figura 1 muestra una pantalla de Choreographe.

Robtica humanoide en Mxico

En Mxico tambin se realiza investigacin en el campo de la robtica. Universidades como el ITAM, UNAM, INAOE e ITESM cuenta con humanoides para que los alumnos puedan programarlos. En el caso del ITAM, cuentan con robots NAO desde el 2008 que participaron en RoboCup en la Liga de Plataforma Estndar (esta primera versin se entreg nicamente a 20 instituciones del mundo). Una excelente noticia es que la edicin 2012 de RoboCup se llevar a cabo en la ciudad de Mxico en junio del 2012. Esto seguramente impulsar el inters en nuestro pas por la robtica.Referencias:Figura 1. El ambiente de desarrollo Choreographe

[1] Configuracin de NAO. http:/ /www.naomexico.mx/html/config.html [2] Canal de videos de Aldebaran Robotics. http:/ /www.youtube.com/aldebaranrobotics [3] RoboCup. http:/ /www.robocup.org

El siguiente paso es poder programar tus propios bloques de comportamiento, para integrarlos en tus coreografas. Esto tpicamente se hace un lenguaje de programacin de alto nivel. En el caso de Choregraphe, se puede hacer en Python o urbiscript (un lenguaje de scripting para robtica). Otras herramientas utilizan el lenguaje RoboBasic, que24

.BIOMiguel ngel Ramrez es Director de Tecnologa en GRE, empresa mexicana dedicada a la comercializacin de soluciones robticas. Miguel es egresado de la Universidad La Salle como Ingeniero en Ciberntica. www.naomexico.mx

.PRINCIPAL

Open Hardwareel hardware tambin puede ser librePor Antonio Toriz

El trmino open hardware, u open source hardware, se refiere al hardware cuyo diseo se hace publicamente disponible para que cualquiera pueda estudiarlo, modificarlo y distribuirlo, adems de poder producir y vender hardware basado en ese diseo. Tanto el hardware como el software que lo habilita, siguen la filosofa del software libre. Hoy en da, el trmino hgalo usted mismo (DIY por sus siglas en ingls) se est popularizando en el hardware gracias a proyectos como Arduino que es una fuente abierta de prototipos electrnicos, una plataforma basada en hardware flexible y fcil de utilizar que naci en Italia en el ao 2005.El movimiento de hardware abierto o libre, busca crear una gran librera accesible para todo el mundo, lo que ayudara a las compaas a reducir en millones de dlares en trabajos de diseo redundantes. Ya que es ms fcil tener una lluvia de ideas propuesta por miles o millones de personas, que por solo una compaa propietaria del hardware, tratando as de que la gente interesada entienda cmo funciona un dispositivo electrnico, pueda fabricarlo, programarlo y poner en prctica esas ideas en alianza con las empresas fabricantes, adems se reducira considerablemente la obsolencia programada y en consecuencia evitaramos tanta basura electrnica que contamina el medio ambiente. Al hablar de open hardware hay que especificar de qu tipo de hardware se est hablando, ya que est clasificado en dos tipos; Hardware esttico. Se refiere al conjunto de elementos materiales de los sistemas electrnicos (tarjetas de circuito impreso, resistencias, capacitores, LEDs, sensores, etctera). Hardware reconfigurable. Es aqul que es descrito mediante un HDL (Hardware Description Language). Se desarrolla de manera similar a como se hace software. Los diseos son archivos de texto que contienen el cdigo fuente. Para tener hardware reconfigurable debemos usar algn lenguaje de programacin con licencia GPL (General Public License). La licencia GPL, al ser un documento que cede ciertos derechos al usuario, asume la forma de un contrato, por lo que usualmente se la denomina contrato de licencia o acuerdo de licencia. La Organizacin Europea para la investigacin Nuclear (CERN) public el 8 de julio de 2011 la versin 1.1 de la Licencia de Hardware Abierto. Existen programas para disear circuitos electrnicos y aprender de la electrnica como EDA (Electronic Design Automation) y GEDA (GPL Electronic Design Automation), son aplicaciones de software libre que permitan poner en prctica las ideas basadas en electrnica. Es posible realizar el ciclo completo de diseo de hardware re25

Evolucin digital

La idea del open hardware no solo es importante en la aplicacin del modelo comunitario y colaborativo para el crecimiento intelectual libre sobre los sistemas electrnicos digitales, sino tambin para impulsar a nuevos talentos y desarrollo tecnolgico en Mxico, evitar la fuga de cerebros e incentivar la creacin de empresas de hardware para no depender tanto de tecnologas extranjeras. El principal desafo es lograr que ms gente se interese en el Open Hardware para crear grupos de trabajo y pasar del primer problema que es la iniciativa, para posteriormente interesarse por la investigacin y fabricacin de los componentes. Sabemos que esto no ser fcil, pero confo plenamente en que poco a poco podremos lograrlo..BIOAntonio Toriz Cureo (@ingbruxo) es egresado de la Universidad Autnoma del Estado de Mxico, Campus Valle de Chalco. Actualmente trabaja como profesor de Preparatoria. Sus reas de especialidad incluyen ingeniera inversa de computadoras, hardware libre y seguridad informtica. Lee su blog en http://antoniotoriz.blogspot.com

www.sg.com.mx |

Software Guru

configurable desde una mquina con GNU/Linux, realizndose la compilacin, simulacin, sntesis y descarga en una FPGA. Para la compilacin y simulacin se puede usar GHDL (http://ghdl.free. fr) junto con GTKWave (http://gtkwave.sourceforge.net), y para la sntesis el entorno ISE de Xilinx. Este ltimo es software comercial pero existe una versin gratuita con algunas restricciones. Sabemos que tanto en el caso del software como el hardware, libre no es lo mismo que gratis. Especficamente, en el caso del hardware, como estamos hablando de componentes fsicos que son fabricados, la adquisicin de componentes electrnicos puede ser costosa. Aun as, es un campo que no solo es apasionante sino que tambin tiene mucho futuro y representa grandes oportunidades.

.PRINCIPAL

Hola MundoPor Hugo Fernndez

Kinect

obteniendo datos de las cmaras de kinect

Como muchos de ustedes saben, Kinect es un accesorio para el Microsoft XBox 360 que consiste en una cmara sensible a la profundidad, lo que le permite identificar lo que ve en un contexto de 3 dimensiones. En principio fue pensado como accesorio para videojuegos, pero sus capacidades permiten que tambin sea un dispositivo til para otros fines. De hecho, apenas algunos das despus de su lanzamiento, comenzaron a aparecer drivers de Kinect creados por desarrolladores independientes. Reconociendo este potencial, Microsoft liber posteriormente un SDK oficial.En este artculo vamos a explicar como utilizar el SDK de Kinect para inicializar y mostrar las diferentes cmaras y funciones de reconocimiento de gestos. la parte superior de nuestro cdigo donde estn los using y agregamos Microsoft.Research.Kinect.Nui.using Microsoft.Research.Kinect.Nui;

Prerrequisitos

Para poder realizar este tutorial es necesario contar con lo siguiente: Sensor Microsoft Kinect. Cable conversor de puerto KINECT a USB (este cable esta incluido cuando compras el KINECT por separado, para la versin que viene con el Xbox 360 no viene con esta extensin, pero se puede conseguir fcilmente en tiendas de electrnicos). Computadora con Microsoft Windows 7 (en sus diferentes versiones) compatible con tarjetas grficas con Direct X 9.0c Microsoft Visual Studio 2010 Express o cualquier edicin Microsoft .NET Framework 4. Adicionalmente necesitamos instalar el Kinect SDK, el cual se puede descargar en http://swgu.ru/r3401

Para poder manejar el dispositivo, haremos referencia a este desde una variable de tipo Runtime. As que debemos declarar dicha variable.Runtime runtime = new Runtime();

A continuacin registramos mtodos para manejar los eventos Loaded y Unloaded del control MainWindow, y tambin registramos mtodos para manejar la seal de las dos cmaras de Kinect: la de video y la de profundidad. El listado 1 muestra esto.

Comencemos

public MainWindow() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainWindow_Loaded); this.Unloaded += new RoutedEventHandler(MainWindow_Unloaded); runtime.VideoFrameReady += new EventHandler (runtime_VideoFrameReady); runtime.DepthFrameReady += new EventHandler (runtime_DepthFrameReady); }

Lo primero que hacemos es crear un nuevo proyecto en Visual Studio, el tipo de proyecto que necesitamos es Aplicacin WPF, nombraremos este proyecto HelloWorldKinect. Posteriormente, en la vista de diseo nos situamos en el cdigo XAML y colocamos dos controles de tipo imagen. El primer control, de preferencia que abarque toda la ventana, lo llamaremos depthImagen y lo utilizaremos para la cmara de profundidad. El segundo control, que llamaremos videoImage, mostrar el contenido de la cmara de video. ste ltimo podemos hacerlo ms pequeo y ser ms pequeo y lo posicionaremos en la esquina superior derecha. Para poder utilizar las libreras de Kinect en nuestro proyecto debemos agregar la referencia correspondiente. Para ello, en la pestaa del Explorador de Soluciones hacemos click derecho en la carpeta References, seleccionamos Add Reference y seleccionamos la referencia Microsoft.Research.Kinect.

Listado 1.

El cdigo

Para agregar la referencia desde el cdigo de nuestro formulario, vamos a26

En el mtodo MainWindow_Loaded que es la que llamamos cuando se carga el dispositivo, vamos a inicializar el dispositivo y llamar dos rutinas, una para el stream de video (cmara RGB) y otra para el stream de profundidad. El listado 2 muestra esto.

.PRINCIPAL

void MainWindow_Loaded(object sender, RoutedEventArgs e) { runtime.Initialize(Microsoft.Research.Kinect.Nui.RuntimeOptions.UseColor | Microsoft.Research.Kinect.Nui.RuntimeOptions.UseDepth); runtime.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color); runtime.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution640x480, ImageType.Depth); }Listado 2.

PlanarImage image = e.ImageFrame.Image; BitmapSource source = BitmapSource.Create(image.Width, image.Height, 96, 96, PixelFormats.Bgr32, null, image.Bits, image.Width * image.BytesPerPixel); videoImage.Source = source; } void runtime_DepthFrameReady(object sender, ImageFrameReadyEventArgs e) { PlanarImage image = e.ImageFrame.Image;

En el mtodo para manejar el evento unloaded, simplemente nos limitamos a cerrar el dispositivo.

void MainWindow_Unloaded(object sender, RoutedEventArgs e) { runtime.Uninitialize();

BitmapSource source = BitmapSource.Create(image.Width, image.Height, 96, 96, PixelFormats.Gray16, null, image.Bits, image.Width * image.BytesPerPixel); depthImage.Source = source; }Listado 4. Mtodos VideoFrameReady y DepthFrameReady.

Listado 3. Cdigo para cerrar el dispositivo.

Como ltimo cdigo vamos definir los mtodos VideoFrameReady y DepthFrameReady que manejan la recepcin del video y la profundidad respectivamente. El contenido de ambos mtodos es muy similar, con muy ligeras variaciones. Comenzamos creando una variable de tipo PlanarImage y asignndole el valor del atributo ImageFrame.Image de nuestro argumento, el cual siempre tiene la imagen que est tomando la cmara en ese momento. Despus definimos una variable de tipo BitmapSource cuyo valor es construido a partir del stream correspondiente, pasndole como parmetros, el ancho, el alto, los DPI de cada imagen (por defecto son 96), el formato de sus pixeles en lo que la diferencia de que una es RGB o BGR32 para el video y para profundidad dar una paleta de colores gris de 16 bits o Gray16, luego los bits en memoria a partir de la variable image. Por ltimo, en cada mtodo se asigna el BitmapSource que definimos, como valor del atributo del control de imgen que definimos en un inicio, videoImage para el control de video y depthImage para el control de profundidad.

La versin original de este artculo se encuentra publicada en http://swgu.ru/ sg3403 Fue editada y publicada en Software Guru con permiso del autor.

Referencias:[1] Kinect for Windows SDK. http:/ /swgu.ru/sg3402 [2] The Kinnect Effect. http:/ /swgu.ru/sg3404

.BIOHugo Fernndez es cofundador y director de CIACOM Systems en Venezuela. Es Microsoft Certified Technology Specialist y se especializa en el desarrollo de aplicaciones web. @hughfernandez

void runtime_VideoFrameReady(object sender, Microsoft.Research.Kinect.Nui.ImageFrameReadyEventArgs e) {

27

www.sg.com.mx |

Nuestro cdigo est listo, ahora solo corremos la aplicacin presionando F5 y podremos ver en nuestra pantalla la seal capturada por el Kinect. No se incluye aqu el screenshot de la imagen generada por el sensor de profundidad porque son tonalidades muy obscuras que no se distinguen en la revista impresa, pero te invito a que lo intentes, es algo bastante sencillo. El cdigo utilizado en este artculo est disponible en http://swgu.ru/ sg3400 Este cdigo prcticamente es el mnimo esencial preestablecido por Microsoft para comenzar a trabajar con el Kinect.

Software Guru

}

.PRINCIPAL

Diseo de un Robot Compatible conPor Pedro Galvn

conoce a

RDSmark

Microsoft Robotics Developer Studio (RDS) es una plataforma para el desarrollo de aplicaciones robticas. RDS provee un framework de programacin, ambiente de ejecucin (runtime), herramientas para creacin y simulacin de aplicaciones, ejemplos de cdigo, plantillas y tutoriales entre otras cosas. En este artculo veremos los aspectos fundamentales de un robot diseado para operar aplicaciones creadas con RDS.Las personas que desean construir aplicaciones robticas se encuentran con que existe una gran variedad de robots disponibles en el mercado, con poca estandarizacin entre ellos y gran variedad en capacidades y precios. Ante esta problemtica, el equipo de Microsoft Robotics se dio a la tarea de definir las caractersticas esenciales de un robot que aproveche los servicios de RDS. El objetivo es que las personas puedan facilmente construir su propio robot, o que terceros construyan y vendan robots listos para usarse, de manera que los desarrolladores pueden concentrarse ms en construir las aplicaciones del robot, que en construir el robot en s. El resultado de este esfuerzo es la RDS Reference Platform. Esta plataforma de referencia es una gua que describe el diseo recomendado para crear un robot real (es decir, un robot fsico) que pueda operarse con RDS.

Arquitectura de hardware.

La figura 1 muestra el ejemplo de una implementacin de un robot MARK.

MARK

El diseo robtico de referencia utiliza al sensor Microsoft Kinect, el cual provee una cmara de video, sensor de profundidad 3D y micrfono. Este diseo fue bautizado como MARK (Mobile Autonomous Robot using Kinect). El diseo del MARK se basa en cuatro principios: mobilidad, autonoma, interactividad y extensibilidad. La mobilidad es provista por una traccin diferencial, la cual es fcil de controlar y permite que el robot gire en su mismo lugar. Para ser autnomo, el robot recurre a una computadora a bordo. Las capacidades avanzadas como visin computarizada, reconocimiento de voz, o conectividad a redes, requieren capacidad de procesamiento mucho mayor a la que proveen los microcontroladores de bajo rango. Incorporar una PC en el diseo tambin permite comunicacin inalmbrica con otras