DevelUY

Planeta de desarrolladores uruguayos

14 de diciembre de 2017

Enrique Almeida

Usabilizando GXServer: Etiquetas en los commits

Quienes usamos GeneXus Server,  cada tanto nos planteamos algunas preguntas dificiles de contestar
  • Cuales son los objetos cambiados para el requerimiento NNNNN?
  • Todos los commits realizados por <persona nueva en el grupo> tuvieron revisión de código?
  • Cuantos commits fueron por mejoras, cuales fueron por arreglo de errores?
  • Cuales son los commits que están prontos para pasar de Stage a Produccion?
Todas estas preguntas serian un poco mas faciles de contestar si se pudiera clasificar / agrupar los commits que se realizan.

Una forma relativamente facil de hacer esto seria te tener etiquetas asociadas a los commits, que puedan ser agregadas en el momento de hacer el commit y modificadas luego del mismo.


Para que puedo usar estas etiquetas?

Por ejemplo podría poner etiqueta que fueran :

ISSUE que va a tener los números de los incidentes. Es bueno para poder agrupar todos los Commits asociado a un mismo problema o requerimiento.

STATUS, puede ser el estado que tiene el commit, en el caso que quiera tener revisión de código, puedo subir un commit, que quede en estado para ser revisado por otra persona y que pueda cambiarse despues del commit.

Seguramente si las tuvieramos se le podria encontrar otros usos.

No parece algo dificil de implementar y podria ser de mucha utilidad.

por noreply@blogger.com (Enrique Almeida), el 14 de diciembre de 2017 a las 12:47

4 de diciembre de 2017

Fernando Briano

Vuelve Mega Man – 19 títulos de Mega Man para Nintendo Switch

Con motivo del festejo de los 30 años de Mega Man, Capcom anunció 19 títulos del bombardero azul para Nintendo Switch. Mediante una transmisión en vivo por Twitch, probablemente el anuncio más importante fue Mega Man 11. Se trata de un nuevo título en la serie original, con el estilo de juego al que nos tiene acostumbrados. La estética -y probablemente el estilo de juego- varía un poco, saltando de la dimensión pixelada a un diseño de 2.5D, con ambientes y personajes dibujados a mano. El enemigo es nuevamente Dr. Wily, y persiste la mecánica de vencer Robot Masters y adquirir sus poderes. Habrá que ver qué innovaciones trae el juego además de los gráficos. Mega Man 11 va a estar disponible para Nintendo Switch, PlayStation 4, Xbox One y PC a fin de año en 2018.

A pesar de esta gran noticia, hubo mucho más Mega Man para celebrar. El primer anuncio de la transmisión fue sobre la saga de X. Los 8 títulos de Mega Man X van a estar disponibles para Nintendo Switch, PS4, Xbox One, y PC. El primer Mega Man X sigue siendo uno de mis juegos favoritos, y está incluido entre los 20 títulos del Super Nes Classic. Los primeros 3 X salieron en Super Nintendo, y más adelante los X del 1 al 6 se publicaron en una compilación para GameCube. Pero Mega Man X7 y X8 no habían estado disponibles en una plataforma Nintendo hasta ahora.

Siempre es bueno volver a jugar Mega Man X, y más en una plataforma portátil como el Nintendo Switch. En mi caso no llegué a jugar los que vinieron después de Mega Man X3, así que va a ser una oportunidad para conocer lo que vino después. Particularmente X7 y X8 donde los gráficos fueron promovidos a 3D.

Como si esto fuera poco, Capcom anunción también Mega Man Legacy Collection 1 y 2 para Nintendo Switch. El primer Legacy Collection salió en Nintendo 3DS, incluyendo los primeros 6 títulos de la serie original, clásicos de la gloriosa época de 8 bits. La segunda colección incluye Mega Man 7, 8, 9 y 10. Mega Man 7 fue el primer y único título de la serie original para 16 bits, publicado originalmente en el Super Nintendo y varias compilaciones posteriores. El estilo 16 bit se mantuvo para Mega Man 8, y de ahí la serie principal descansó por un tiempo. Más de 10 años después, la serie original vuelve a sus raíces 8 bits tanto en gráficos como sonido con Mega Man 9 y Mega Man 10.

En un rato, Capcom anunció 19 títulos de Mega Man para Nintendo Switch. Prácticamente todos los Mega Man que existen, al menos todos los clásicos, van a estar a la mano. La empresa venía descuidando un poco al bombardero azul, así como a las plataformas Nintendo. Pero el gigante dormido despertó, y se viene con todo. Nintendo Switch ha tenido un debut excelente este 2017, vendiendo más unidades de las que puede producir, y con un título exitoso atrás del otro. Cada vez son más las empresas que desarrollan juegos para Nintendo Switch, y se vienen un montón de juegos más desarrollados por Nintendo (algunos que conocemos y otros de los que ni sabemos). Como se viene dando la situación, auguro una nueva época dorada para Nintendo.

Mega Man 30

por Fernando, el 4 de diciembre de 2017 a las 22:05

30 de noviembre de 2017

Eugenio Garcia

Un poco de mi historia y el porqué disfruto trabajando para crear GeneXus

En 1997 me encontraba en mi penúltimo año de la carrera de ingeniría en computación en la Facultad de Ingeniría de la UDELAR. Hacía poco menos de 4 años había llegado a estudiar a Montevideo desde Rocha y había comenzado a descubrir el mundo del desarrollo de software en un momento donde no existía la Web como la conocemos y la vivimos en cada cosa que hacemos en nuestra vida cotidiana de hoy. Aprendí a programar en Pascal y esos fueron mis primeros pasos, para luego aprender a programar en C y C++ y pasar luego por Visual Basic 4.0 y con esas herramientas salir a conocer el mundo laboral de las empresas que desarrollan software.

Hasta mediados del 97 no había escuchado mencionar un lenguaje llamado GeneXus y mucho menos la existencia de la empresa Artech Consultores (hoy en día se llama GeneXus) y gracias a un gran amigo que me aviso de la posibilidad de aprender este lenguaje y luego hacer una pasantía en la empresa me interesó el tema y fui con la única carta de presentación que tenía en ese momento que era mi escolaridad.

Cuando hice el curso GeneXus me pareció un abismo la velocidad con la cual podía hacer aplicaciones (en aquel momento generadas para Visual Fox Pro ) para que las mismas ejecutarán en un PC con Windows 95, me enfrentaba a un paradigma de crear aplicaciones diferente a lo que yo venía aprendiendo en la Universidad y me resultó realmente una forma muchos mas intuitiva que lo que había aprendido hacer con C++ o el propio Visual Basic.

Poco tiempo después tuve una entrevista con Breogán Gonda y Nicolas Jodal, fundadores de GeneXus, para conocerme y ver donde me gustaría trabajar dentro de la empresa y fue ahí donde comencé a conocer el próposito de lo que querían hacer con GeneXus, me hablaron de un paradigma diferente de desarrollar software, que la forma de desarrollar software que se viene aplicando no escala y que con GeneXus buscaban cambiar esto. A mis 21 años, que tenía en ese momento, realmente no me fue clara esa visión pero la ilusión de trabajar en un lugar donde se notaba que le ponían mucha pasión a lo que hacían y donde había un propósito claro de querer cambiar algo del mundo en que vivíamos me sedujo y así lo hice.

Hoy casi 20 años después veo hacia atrás y repaso todo el camino recorrido y siento que seguimos con la misma pasión de querer cambiar el mundo, donde todos quienes compartimos este paso por el mundo dentro de GeneXus, buscamos cambiar la forma en la cual desarrollamos software y para eso decimos que nosotros hacemos "Software para crear Software".

Por eso disfruto de crear GeneXus y todos los productos que hemos construido a su alrededor porque cada cosa que hacemos contribuye a que la tarea de desarrollar aplicaciones sea algo cada vez más automático y siga ampliando la brecha entre hacer algo de la forma tradicional que nos enseñan en las universidades en cuanto al desarrollo de software y hacerlo de la forma que proponemos con GeneXus.

Tener un próposito claro, una visión a futuro es lo que siempre ha movido mi motivación interna en todos los aspectos de mi vida y lo que hago hoy junto a todo el equipo de GeneXus es intentar cumplir este sueño que sabemos que algún día será el motor de cambio en el área de la tecnología para las generaciones futuras de desarrolladores.


por Eugenio Garcia (noreply@blogger.com), el 30 de noviembre de 2017 a las 18:41

Inteligencia Artificial aplicada al desarrollo de aplicaciones.

Generalmente cuando pensamos en el término Inteligencia Artificial (IA) lo asociamos a películas de ciencia ficción donde máquinas inteligentes superan al hombre. La realidad actual en la industria del software dista mucho de esta imagen. Si clasificamos los diferentes tipos de IA podemos encontrar ejemplos concretos en los cuales se ha avanzado. Por ejemplo, en el año 1997, una computadora llamada Deep Blue creada por IBM, le ganó al campeón de ajedrez Garry Kasparov.


Esta computadora cae dentro de la categoría de Inteligencia Reactiva, básicamente era una máquina
especializada en jugar ajedrez que usa la información contextual de cómo está el juego en ese momento y en base a esto calcula las mejores opciones de jugadas posibles para tomar una decisión. En este caso no es una máquina que aprenda de experiencias anteriores o la cual se la pueda entrenar previamente.

Hoy nos encontramos en otro nivel de evolución de Inteligencia Artificial. Han surgido técnicas de Machine Learning que nos permiten crear modelos que representan determinados escenarios.  Con suficiente información podemos entrenar estos modelos y lograr que ellos efectivamente aprendan cómo resolver las situaciones y hagan uso de las experiencias previas. Con esto se han logrado muchos avances en el desarrollo de los vehículos autónomos o en el procesamiento del lenguaje natural, lo cual ha llevado a que contemos con asistentes virtuales en nuestros smartphones con la capacidad de entender órdenes de voz y ejecutar las tareas que les pedimos.


En los últimos años dentro del área de Machine Learning se han consolidado las técnicas de Deep Learning que, a través del uso de redes neuronales, le dan la capacidad a las computadoras de procesar grandes cantidades de datos y aprender por sí mismas.   Generalmente podemos dividir los problemas de Machine Learning en dos tipos, los que necesitan de un aprendizaje supervisado y otros donde nos enfrentamos a un aprendizaje no supervisado. Un ejemplo claro de aprendizaje supervisado es lo que hacemos en Facebook. Cuando confirmamos que en determinada foto se encuentra determinada persona, le estamos indicando a Facebook si la persona es o no es quien nos sugiere. Otro ejemplo de esto es el algoritmo de filtro de SPAM de Gmail, al cual le vamos indicando cuáles emails son SPAM para nosotros. De esta forma, gracias al entrenamiento que millones de usuarios realizan, este filtro se vuelve cada vez más preciso en detectar el SPAM. Un ejemplo de aprendizaje no supervisado, donde la máquina se entrenó a sí misma es el caso de AlphaGo Zero, que aprendió y mejoró su juego en base a partidas de Go reales, jugadas por profesionales y amateurs. Con ese aprendizaje, en 2016 AlphaGo derrotó al campeón de Go, Lee Sedol por 4 partidas a 1.


Como si eso no fuera suficiente, en 2017 Google creó una versión mejorada, AlphaGo Zero, que
tuvo la particularidad de entrenarse jugando consigo misma, con la única información de las reglas del juego. Le llevó tres días entrenarse por sí sola -el tiempo que le lleva jugar unas 4,9 millones de partidas- sin las limitaciones del conocimiento humano previo. Cuando la pusieron a competir con su predecesora, el resultado fue una aplastante victoria de 100 partidos a cero de AlphaGo Zero sobre AlphaGo. Puedes ver más detalles de esta historia aquí "Stunning AI Breakthrough Takes Us One Step Closer to the Singularity".


Nos falta mucho aún para llegar a máquinas que tengan la capacidad de crear sus propias abstracciones y la capacidad de entender que en el mundo existen personas cuyos pensamientos y sentimientos determinan su conducta, lo que en sicología se llama “teoría de la mente”. Mientras tanto seguiremos entrenando modelos de IA que nos ayuden a hacer tareas repetitivas, pero a su vez cada vez más complejas, como conducir un automóvil, reconocer tumores en tomografías o identificar personas u objetos en una foto.


¿Y GeneXus, cómo juega en este mundo?


GeneXus fue concebido como un sistema experto, el cual a partir de una Base de Conocimiento, y con la inteligencia de un motor de inferencia puede generar automáticamente una solución de software, con su base de datos, el código ejecutable y la interfaz de usuario. Esto es lo que venimos haciendo desde que GeneXus fue concebido, hacer real la visión de automatizar las tareas de desarrollo y cambiar el paradigma con el cual desarrollamos software. Entonces, en vez de preocuparse por la solución técnica (cómo programar algo), los usuarios pueden concentrarse en la solución al problema de negocio (qué es lo que se necesita programar), a partir del conocimiento que ya tienen los usuarios del negocio. Es a partir de este conocimiento que se construyen los modelos en GeneXus, para que luego el propio GeneXus -utilizando técnicas de IA- pueda generar automáticamente el mejor código posible para la plataforma en la cual se haya definido que se necesita correr el sistema.


Hoy nos encontramos en una era donde podemos acceder a las distintas plataformas que ofrecen servicios de IA en la nube. Estas plataformas están posibilitando el acceso a modelos de IA que nos permiten integrar en nuestras aplicaciones capacidades de procesamiento de lenguaje natural o procesamiento de imágenes y videos, que de otra forma sería muy complicado y costoso de desarrollar. Nuevamente, nos encontramos con una variedad interesante de opciones, lo cual nos obliga a aprender cómo interactuar con cada una de ellas. GeneXus, siguiendo su visión de simplificar el desarrollo de aplicaciones, está construyendo un generador de Chatbots que utiliza estas plataformas pero simplifica las tareas para crear un modelo y entrenarlo, para que estos Chatbots queden integrados a las aplicaciones creadas en GeneXus. Además, hemos creado SDKs para integrar los servicios de Machine Learning de SAP Leonardo e IBM Watson y lo mismo iremos haciendo para otras plataformas como Microsoft Azure, Amazon Web Services, etc.


En conclusión, creemos que nos encontramos en un estado avanzado en el desarrollo y madurez de la Inteligencia Artificial, en particular de Machine Learning, y que debemos buscar las formas de integrar estas capacidades a nuestras aplicaciones. GeneXus busca simplificar esta tarea y sobre todo integrarse con las plataformas más relevantes del mercado, para que los usuarios puedan generar las aplicaciones más sofisticadas con el menor esfuerzo posible.


Todas las industrias han sido revolucionadas a partir de la introducción de software, pero -paradójicamente- la propia industria de software sigue construyendo aplicaciones de forma “manual”, artesanal, utilizando técnicas de hace más de 30 ó 40 años. Con GeneXus queremos revolucionar y cambiar el paradigma de cómo se construyen las aplicaciones y por esto buscamos simplificar y automatizar el desarrollo de software basándonos en algoritmos de IA.
Estamos en una era donde el acceso al conocimiento y a la tecnología está disponible fácilmente para cualquier persona que lo quiera emplear.

Albert Einstein dijo una vez “La imaginación es más importante que el conocimiento. Porque el conocimiento está limitado a todo lo que conocemos y comprendemos, mientras que la imaginación abarca todo el mundo, y todo lo que habrá para conocer y comprender”, así que los invito a imaginar. Imaginemos y creemos aplicaciones realmente innovadoras que aprovechen las nuevas tecnologías como IA.

por Eugenio Garcia (noreply@blogger.com), el 30 de noviembre de 2017 a las 18:41

Enrique Almeida

Porque jodes tanto con modulos?

Un amigo me preguntó porque me había dedicado desde hace algún tiempo, a trabajar en la modularización de KB, si hasta el momento nos habíamos arreglado sin módulos y podíamos hacer aplicaciones sin problemas.

El conocía las dificultades del proceso de modularización y los cambios que implica introducir módulos al proceso de desarrollo, pero no veia las ventajas de tener todo bien modularizado.

Mi razonamiento para tener una KB modularizada, es bastante sencillo:

Es la única forma rentable que veo, con la que podremos resolver problemas mayores en el futuro, con GeneXus.

Paso a explicar un poco.

GeneXus es una herramienta que resuelve muy bien el desarrollo de pequeñas aplicaciones. Cuando uno trabaja con 10 tablas, es difícil encontrar algo que demore o funcione lento.

Cuando trabajamos con 100 tablas, el proceso de normalizacion y reorganización puede ponerse un poco mas pesado, pero no hay nada que un build all (o en el peor de lo casos un rebuild all) soluciona casi todos los problemas.

Ahora, cuando pasamos a trabajar con 1000 tablas, es donde se cruza el umbral donde los tiempos de desarrollo se empiezan a complicar, haciendo que una gran parte del aumento de la productividad que nos brinda GeneXus se vaya en "tiempos muertos".

GeneXus resuelve de forma buena una cantidad de problemas complejos y utiliza heuristicas para lograrlo, que funcionan muy bien para KB chicas.

Varios de estos problemas tienen complejidades  no lineales, por lo que al aumentar la cantidad de objetos de la KB, los tiempos se disparan. Muchos de estos problemas, están relacionados con grafos (árbol de llamadas o dependencias) y esto hace que su complejidad y por lo tanto los tiempos se disparen rápidamente.

Cualquiera que trabaje con una KB grande, sabe que tiene que hay que cambiar algunas propiedades de la KB para que puedas trabajar:

* Deshabilitar el Generate Developer Menu
* Deshabilitar el Full Text Indexer de la KB
* Evitar definir redundancias.

Cuando trabajamos con GXServer (casi todas las KB grandes trabajan con GXServer), empiezan a pasar cosas  que son contraproducentes con la productividad de todo el grupo.
Los desarrolladores no quieren hacer UPDATE diario, porque bajarse los cambios y hacer un rebuild les demora 4 horas, lo cual luego les da muchos problemas.

En nuestra experiencia, la cantidad de objetos en una KB con desarrollo activo, tiende a crecer a pesar de trabajar en forma activa de borrar todo lo que no se use y de usar la menor cantidad de objetos posibles. Tenemos un promedio de 100 objetos nuevos todos los meses. 

Estas dos tendencias, hace que nuestra capacidad de desarrollar aplicaciones grandes (mas grandes) en el futuro se vea comprometida. Vamos a poder desarrollarlas, pero a un costo demasiado grande o con malos tiempos de desarrollo.

Por todo estos temas, creo que la modularizacion nos va a ayudar en el futuro. Mi sueño es poder tener una KB empresarial (20.000 objetos?) pero poder generarla en forma modular. De esta forma, tendriamos la ventaja de trabajar con KB chicas, pero conservando las enormes ventajas de tener todo junto.

Aun falta bastante trabajo y herramientas para soportar esto, pero una vez que tengamos modularizado, podríamos tener generación/compilación por módulos, paralelizar las compilaciones, reorganizaciones por módulos, build all del modulo que estoy trabajando, etc.



por noreply@blogger.com (Enrique Almeida), el 30 de noviembre de 2017 a las 18:28

29 de noviembre de 2017

Fernando Briano

Actualización a Montevideo Bicis con datos de accidentes 2016

Montevideo Bicis es un sitio web que presenta información objetiva para gente que quiera circular en bicicleta en Montevideo. Aprovecha Datos Abiertos de la Intendencia de Montevideo y UNASEV.

UNASEV liberó los datos de accidentes de tránsito de 2016, así que aproveché para actualizar un poco el sitio. El formato del archivo de datos cambió respecto a años anteriores. Pero quienes hemos trabajado con muchos datos abiertos de distintas fuentes, sabemos que pocos cumplen con los 10 mandamientos del Open Data.

No publicarás Datos Impuros

Para procesar los CSV’s, tengo que convertirlos a UTF-8 desde el formato ISO_8859-1 que creo que es un formato en el que exporta Office en Windows. Y en el caso de los del año 2016, tuve que cambiar el separador de los CSV de tabulador a ; y eliminar las comillas dobles para conservar consistencia con los años anteriores. Para eso tengo un script en bash que se encarga de todo, algo así:


#!/bin/sh
iconv -f ISO_8859-1 -t UTF-8 Personas_fallecidas_en_2012.csv > 2012.csv
...
iconv -f ISO_8859-1 -t UTF-8 Fallecidos_2016.txt | sed 's/\t/";"/g' | sed 's/\"//g' > 2016.csv

Este año también se le agregó tilde a la palabra “CAÍDA”, por lo que el procesamiento de datos tiene que contemplar ambas posibilidades, con y sin tildes.

Ya que estaba aproveché a refactorizar bastante el código. Se notaba que el proyecto estaba hecho a las apuradas y repetí cantidades abismales y vergonzosas de código. Borré muchas líneas de código (oh, satisfacción…) y escribí un código un poco más entendible. El sitio sigue teniendo básicamente la misma funcionalidad y seguramente no haya cambiado la velocidad de carga ni nada. Pero seguiré manteniéndolo actualizado cuando pueda y con suerte algún día tendré tiempo para dedicarle un poco más y que crezca.

Un aspecto positivo que muestra el sitio, es que en 2016 hubieron menos accidentes de tránsito fatales respecto a los años anteriores, al menos así está registrado en los datos abiertos de UNASEV.

Si les interesa el tema, pueden visitar MontevideoBicis.com, y ver el código fuente en GitHub.

por Fernando, el 29 de noviembre de 2017 a las 23:51